浏览器原理 38 # 加载阶段性能:使用 Audits(Lighthouse) 来优化 Web 性能2

简介: 浏览器原理 38 # 加载阶段性能:使用 Audits(Lighthouse) 来优化 Web 性能

根据性能报告优化 Web 性能


部分参考:如何使用Lighthouse性能检测工具

页面加载过程:

20210625185702174.png


FP、FCP、LCP

在渲染进程确认要渲染当前的请求后,渲染进程会创建一个空白页面,我们把创建空白页面的这个时间点称为 First Paint,简称 FP


上图中,bundle.js 是关键资源,因此需要完成加载之后,渲染进程才能执行该脚本,然后脚本会修改 DOM,引发重绘和重排等一系列操作,当页面中绘制了第一个像素时,我们把这个时间点称为 First Content Paint,简称 FCP。


接下来继续执行 JavaScript 脚本,当首屏内容完全绘制完成时,我们把这个时间点称为 Largest Content Paint,简称 LCP。


在 FCP 和 LCP 中间,还有一个 FMP(First Meaningfull Paint),这个是首次有效绘制,由于 FMP 计算复杂,而且容易出错,现在不推荐使用该指标。


接下来 JavaScript 脚本执行结束,渲染进程判断该页面的 DOM 生成完毕,于是触发 DOMContentLoad 事件。


等所有资源都加载结束之后,再触发 onload 事件。



First Paint

如果 FP 时间过久,那么直接说明了一个问题,那就是页面的 HTML 文件可能由于网络原因导致加载时间过久。


1.首次内容绘制(First Contentful Paint)

第一次内容丰富的绘画(FCP)指标衡量了从页面开始加载到页面内容的任何部分呈现在屏幕上的时间。对于该指标,"内容"指的是文本、图像(包括背景图像)、svg元素或非白色canvas元素。


20210625193401292.png


在上面的负载时间线中,FCP发生在第二帧中,就像呈现给屏幕的第一文本和图像元素时一样。

虽然部分内容已经呈现,但并非所有内容都已呈现。


这是 First Contentful Paint (FCP) 和 Largest Contentful Paint (LCP) 之间的一个重要区别:LCP的目的是衡量页面的主要内容何时完成加载。



2.首屏时间 (Speed Index)


速度指数衡量的是内容在页面加载过程中的视觉显示速度。

利用Lighthouse报告中的 "Opportunities "部分来确定哪些改进对你的页面最有价值。机会越重要,对性能评分的影响就越大。



3.最大内容绘制(Largest Contentful Paint)

最大内容画(LCP)指标报告了在视口中可见的最大图像或文本块的渲染时间,相对于页面首次开始加载的时间。


20210625194111601.png

从图上也能看出来,为了提供良好的用户体验,网站应该努力使最大内容画幅达到2.5秒或更少。

简单理解就是:


CLS测量的是整个页面生命周期内发生的每一次意外布局转变的所有单个布局转变得分的总和。

布局偏移发生在可见元素从一个渲染帧到下一个渲染帧改变其位置的任何时候。关于如何计算单个布局偏移分数,请参见下文)。



4.完全可交互时间 (Time to Interactive)

完全可交互时间 (Time to Interactive),简称 TTI,它表示页面中所有元素都达到了可交互的时长。

简单理解就这时候页面的内容已经完全显示出来了,所有的 JavaScript 事件已经注册完成,页面能够对用户的交互做出快速响应,通常满足响应速度在 50 毫秒以内。如果要解决 TTI 时间过久的问题,可以推迟执行一些和生成页面无关的 JavaScript 工作。



5.总阻塞时间(Total Blocking Time)

总阻塞时间(Total Blocking Time,TBT)量化了负载响应能力,测量了主线程被阻塞的时间长到足以阻止输入响应的总时间。TBT衡量的是第一次有内容的绘画(FCP)和交互时间(TTI)之间的总时间。它是TTI的配套指标,它为量化主线程活动带来了更多的细微差别,这些活动阻碍了用户与页面进行交互的能力。

此外,TBT与核心网络生命力的现场指标First Input Delay(FID)有很好的相关性。

需要更多的了解,可以参考链接:https://web.dev/tbt/



6.累积布局偏移 (Cumulative Layout Shift)

Cumulative Layout Shift (CLS) 是一种视觉稳定性的测量方法,它量化了页面内容在视觉上的移动程度。它量化了一个页面的内容在视觉上移动的程度。

简单理解就是:CLS测量的是整个页面生命周期内发生的每一次意外布局转变的所有单个布局转变得分的总和。


布局偏移发生在可见元素从一个渲染帧到下一个渲染帧改变其位置的任何时候。

关于如何计算单个布局偏移分数,请参见下文:https://web.dev/cls/


20210625194937957.png



从上面的图来看,CLS得分低是给开发者的一个信号,表明他们的用户没有经历不必要的内容移动;CLS得分低于0.10被认为是 “好”。



相关名词解释、资料


   TTFB:time for First Byte 首字节时间

   FP:First Paint 首次绘制

   FCP:First Contentful Paint 首次有内容的渲染

   FMP:First Meaningful Paint 首次有意义的绘制

   TTI:Time To interactive 可交互时间

   Long tasks:超过50ms的任务

   SSR && CSR:服务端渲染和客户端渲染

   Isomorphic JS:同构化


[1] Lighthouse performance scoring: https://web.dev/performance-scoring/

[2] GoogleChrome-lighthouse: https://github.com/GoogleChrome/lighthouse

[3] What’s New in Lighthouse 6.0: https://web.dev/lighthouse-whats-new-6.0/

[4] Measure: https://web.dev/measure/

[5] How does Lighthouse work?:https://github.com/GoogleChrome/lighthouse/blob/master/docs/architecture.md

[6] Largest Contentful Paint (LCP): https://web.dev/lcp/

[7] Total Blocking Time (TBT): https://web.dev/tbt/

[8] Cumulative Layout Shift (CLS): https://web.dev/cls/

[9] First Contentful Paint (FCP): https://web.dev/fcp/

[10] Speed Index: https://web.dev/speed-index/




拓展:灯塔性能评分

参考文章:Lighthouse performance scoring


20210625172644833.png


绩效分数如何加权

性能分数是加权平均的的指标分数。自然,权重越重的指标对您的整体绩效得分影响越大。指标分数在报告中不可见,但在幕后计算。


20210625172739535.png


20210625172750520.png


如何确定指标分数

一旦 Lighthouse 完成收集性能指标(主要以毫秒为单位报告),它会通过查看指标值落在其 Lighthouse 评分分布的哪个位置,将每个原始指标值转换为从 0 到 100 的指标分数。评分分布是从HTTP Archive上真实网站性能数据的性能指标得出的对数正态分布。



例如,最大内容绘制 (LCP) 测量用户何时认为页面的最大内容可见。LCP 的度量值表示用户启动页面加载和页面呈现其主要内容之间的持续时间。基于真实的网站数据,表现最好的网站在大约 1,220 毫秒内呈现 LCP,因此指标值映射到 99 分。


再深入一点,Lighthouse 评分曲线模型使用 HTTPArchive 数据来确定两个控制点,然后设置对数正态曲线的形状。HTTPArchive 数据的第 25 个百分点变为 50(中值控制点),第 8 个百分点变为 90(良好/绿色控制点)。在探索下面的评分曲线图时,请注意在 0.50 和 0.92 之间,度量值和分数之间存在近乎线性的关系。大约 0.96 的分数是“收益递减点”,在它上面,曲线拉开,需要越来越多的指标改进来提高已经很高的分数。


https://www.desmos.com/calculator/o98tbeyt1t?lang=zh-CN


20210625173238796.png


















目录
相关文章
|
7天前
|
存储 缓存 监控
|
2天前
|
机器学习/深度学习 JavaScript 前端开发
深入探索WebAssembly:提升Web应用的性能
【10月更文挑战第15天】深入探索WebAssembly:提升Web应用的性能
11 3
|
22天前
|
Web App开发 安全 中间件
谷歌、火狐、Edge等浏览器如何使用ActiveX控件
allWebPlugin 是一款为用户提供安全、可靠且便捷的浏览器插件服务的中间件产品,支持 Chrome、Firefox、Edge 和 360 等浏览器。其 V2.0.0.20 版本支持一个页面加载多个插件,并解决了插件与浏览器之间的焦点问题。用户可通过“信息化系统 + allWebPlugin + 插件 + 浏览器”的解决方案实现 ActiveX 插件的无缝集成。下载地址见文末,安装包含详细说明。
|
14天前
|
Web App开发 XML JavaScript
Python 操作浏览器:让 Python 和 Web 世界合二为一
Python 操作浏览器:让 Python 和 Web 世界合二为一
21 3
|
29天前
|
安全 Oracle Java
edge浏览器加载java插件
edge浏览器加载java插件
103 1
|
1月前
|
缓存 负载均衡 前端开发
优化Web应用性能的十种策略
在当今的数字化时代,Web应用的性能直接影响用户体验和业务成效。本文深入探讨了优化Web应用性能的十种策略,从前端的资源优化到后端的架构改进,涵盖了缓存机制、异步加载、数据库优化等关键技术手段。这些策略不仅能提升响应速度,还能显著减少服务器负担和带宽消耗,为开发者提供了一系列切实可行的解决方案。
|
1月前
|
网络协议 Windows
[收藏]优化基于Win 2000系统的Web服务器性能
[收藏]优化基于Win 2000系统的Web服务器性能
|
2月前
|
物联网 C# 智能硬件
智能家居新篇章:WPF与物联网的智慧碰撞——通过MQTT协议连接与控制智能设备,打造现代科技生活的完美体验
【8月更文挑战第31天】物联网(IoT)技术的发展使智能家居设备成为现代家庭的一部分。通过物联网,家用电器和传感器可以互联互通,实现远程控制和状态监测等功能。本文将探讨如何在Windows Presentation Foundation(WPF)应用中集成物联网技术,通过具体示例代码展示其实现过程。文章首先介绍了MQTT协议及其在智能家居中的应用,并详细描述了使用Wi-Fi连接方式的原因。随后,通过安装Paho MQTT客户端库并创建MQTT客户端实例,演示了如何编写一个简单的WPF应用程序来控制智能灯泡。
75 0
|
2月前
|
Java 数据库 API
JSF与JPA的史诗级联盟:如何编织数据持久化的华丽织锦,重塑Web应用的荣耀
【8月更文挑战第31天】JavaServer Faces (JSF) 和 Java Persistence API (JPA) 分别是构建Java Web应用的用户界面组件框架和持久化标准。结合使用JSF与JPA,能够打造强大的数据驱动Web应用。首先,通过定义实体类(如`User`)和配置`persistence.xml`来设置JPA环境。然后,在JSF中利用Managed Bean(如`UserBean`)管理业务逻辑,通过`EntityManager`执行数据持久化操作。
46 0
|
8天前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
46 3