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

article/2025/11/10 19:23:53

说明

浏览器工作原理与实践专栏学习笔记

什么是 Web 性能?

Web performance:https://en.wikipedia.org/wiki/Web_performance

Web 性能描述了 Web 应用在浏览器上的加载和显示的速度。

在这里插入图片描述

性能检测工具:Performance vs Audits

Performance 和 Audits,它们能够准确统计页面在加载阶段和运行阶段的一些核心数据,诸如任务执行记录、首屏展示花费的时长等,有了这些数据我们就能很容易定位到 Web 应用的性能瓶颈 。

Performance

非常强大,它提供了非常多的运行时数据,利用这些数据我们就可以分析出来 Web 应用的瓶颈。学会起来非常有难度,因为涉及到了特别多的概念,而这些概念又和浏览器的系统架构、消息循环机制、渲染流水线等知识紧密联系在了一起。

Audtis (Lighthouse)

简单许多,它将检测到的细节数据隐藏在背后,只提供给一些直观的性能数据,同时,还会提供一些优化建议。

总的来说:Perfomance 能让我们看到更多细节数据,但是更加复杂,Audits 就比较智能,但是隐藏了更多细节。

检测之前准备工作

配置好工作环境:

  • 首先准备 Chrome Canary 版的浏览器(稳定版的 Chrome 也行)

    Chrome Canary 是采用最新技术构建的,它的开发者工具和浏览器特性都是最新的

  • 然后需要在 Chrome 的隐身模式下工作,这样可以确保我们安装的扩展、浏览器缓存、Cookie 等数据不会影响到检测结果。

下载:Google Chrome

在这里插入图片描述

安装好就是金色的图标

在这里插入图片描述

利用 Audits(Lighthouse )生成 Web 性能报告

打开 B站 为例

  1. 首先打开浏览器的隐身窗口
  2. 然后在隐身窗口中输入 B 站的网站。
  3. 打开 Chrome 的开发者工具,选择 Audits 标签。

这里说明一下:chrome v83.0.4103.61Audits 升级成 Lighthouse 了。

所以看不到 Audits 标签的,直接看 Lighthouse 标签就行。

Audits(Lighthouse ) 界面

Audits 界面

在这里插入图片描述

升级后的 Lighthouse 界面

在这里插入图片描述

  • 监测类型 (Categories):指需要监控哪些内容
    • 监测并分析 Web 性能 (Performance);
    • 监测并分析 PWA(Progressive Web App) 程序的性能;
    • 监测并分析 Web 应用是否采用了最佳实践策略 (Best practices);
    • 监测并分析是否实施了无障碍功能 (Accessibility),无障碍功能让一些身体有障碍的人可以方便地浏览你的 Web 应用。
    • 监测并分析 Web 应用是否采实施了 SEO 搜素引擎优化 (SEO)。
  • 设备类型 (Device)
    • Moblie:选项是用来模拟移动设备环境的
    • Desktop:选项是用来模拟桌面环境的

开始生成报告

配置好选项之后,点击生成报告 (Generate report) 按钮来生成报告

在这里插入图片描述

报告生成中

在这里插入图片描述

报告生成完毕

在这里插入图片描述

解读性能报告

分数的范围:

在这里插入图片描述

1.性能指标 (Metrics)

在这里插入图片描述

点击 view original trace 按钮会进入:

在这里插入图片描述

点击 view treemap 按钮会进入:

在这里插入图片描述

2.可优化项 (Opportunities)

页面中的一些可以直接优化的部分:

在这里插入图片描述

3.手动诊断 (Diagnostics)

采集了一些可能存在性能问题的指标,这些指标可能会影响到页面的加载性能,需要依据实际情况,来手动排查每一项。

在这里插入图片描述

4.运行时设置 (Runtime Settings)

有运行时的一些基本数据,如果选择移动设备模式,可以看到发送网络请求时的 User Agent 会变成设备相关信息,还有会模拟设备的网速,这个体现在网络限速上。

在这里插入图片描述

根据性能报告优化 Web 性能

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

页面加载过程:

在这里插入图片描述

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元素。

在这里插入图片描述

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

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

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

2.首屏时间 (Speed Index)

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

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

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

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

在这里插入图片描述

从图上也能看出来,为了提供良好的用户体验,网站应该努力使最大内容画幅达到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/

在这里插入图片描述

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

相关名词解释、资料

  1. TTFB:time for First Byte 首字节时间
  2. FP:First Paint 首次绘制
  3. FCP:First Contentful Paint 首次有内容的渲染
  4. FMP:First Meaningful Paint 首次有意义的绘制
  5. TTI:Time To interactive 可交互时间
  6. Long tasks:超过50ms的任务
  7. SSR && CSR:服务端渲染和客户端渲染
  8. 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

为什么你的分数会波动

在这里插入图片描述

绩效分数如何加权

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

在这里插入图片描述

在这里插入图片描述

如何确定指标分数

一旦 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

在这里插入图片描述


http://chatgpt.dhexx.cn/article/ff4FwGBE.shtml

相关文章

浏览器兼容性 问题产生原因 厂商前缀 滚动条 css hack 渐近增强 和 优雅降级 caniuse

目录 浏览器兼容性问题产生原因厂商前缀滚动条 css hack渐近增强 和 优雅降级caniuse 浏览器兼容性 问题产生原因 市场竞争标准版本的变化 厂商前缀 比如:box-sizing, 谷歌旧版本浏览器中使用-webkit-box-sizing:border-box 市场竞争,标准…

前端性能优化(二)02-页面性能优化之浏览器——浏览器是多进程的 浏览器的渲染机制

前端性能优化(二)02-页面性能优化之浏览器——浏览器是多进程的 & 浏览器的渲染机制 浏览器是多进程的 进程线程简单的理解:进程里面可以有多个线程,进程就是QQ,线程就是会话。 浏览器是多进程的浏览器之所以能够…

优化-浏览器缓存和压缩优化

一、减少HTTP请求 1.图片地图: 假设导航栏上有五幅图片,点击每张图片都会进入一个链接,这样五张导航的图片在加载时会产生5个HTTP请求。然而,使用一个图片地图可以提高效率,这样就只需要一个HTTP请求。 服务器端图片…

浏览器原理及性能优化

1. 影响页面性能的因素 HTTP 请求复杂的页面逻辑重度的DOM操作服务端响应大量的数据… 2. 优化网页性能 资源压缩与合并(代码打包)异步加载CDNDNS 预解析缓存… 一、浏览器 1.1 主要作用 浏览器的主要功能就是向服务器发出请求,在浏览器…

前端性能优化(三)——浏览器九大缓存方法

浏览器缓存是浏览器保存数据用于快速读取或避免请求重复资源,提升网页加载速度。缓存的数据到底放哪了呢?作为开发者,有时也需要检查一下缓存中的内容。所以介绍下缓存方法以及缓存内容在哪查找? 上一篇文章介绍的是《浏览器缓存…

chrome浏览器性能分析

匿名模式 匿名模式可以保证Chrome在一个相对干净的环境下运行。比如安装了许多chrome插件,这些插件可能会影响我们分析性能表现 使用快捷键ctrl shift N 即可代码匿名模式下的chrome新标签页 如果想分析移动设备 的页面性能,可用CPU控制器来模拟移动…

浏览器性能优化(初笔记后续修改补充)

参考:【前端工程师面试宝典】学习说明_互联网校招面试真题面经汇总_牛客网 (nowcoder.com) 性能优化 前端性能优化的手段 方面:加载优化、执行优化、渲染优化、样式优化、脚本优化 加载优化:减少HTTP请求、缓存资源、压缩代码、无阻塞、首屏加载、按需…

深入浏览器内部谈性能优化

1. 浏览器发展历史 a. 1995 年,美国网景公司因“网景浏览器”的发布而快速崛起 b. 同年,微软发布windows95,捆绑IE c. 2002年,微软占据了浏览器市场80%的份额 2. 浏览器三大进化路线(Web应用能做的事以及未来发展趋…

GreenPlum数据库数据脱敏

1、首先备份要操作的数据库表,防止对原表误操作。 2、例子:数据库表名:st_person,要操作的字段为:phone 3、select phone from st_person ; --看看表里该字段是否有数据,大概格式是什么,该表…

数据库防火墙、数据库加密、数据库脱敏真的可用吗?

数据库是所有信息系统的核心,数据库的安全通常是指其中所存数据的安全,是网络安全、信息安全的重要组成部分。目前有很多相关性产品,如数据库加密、数据库防火墙、数据库脱敏、数据库审计等。 一、数据库防火墙 数据库防火墙系统:…

mysql动态脱敏查询_数据库动态脱敏

原标题:数据库动态脱敏 产品简介 中安威士数据动态脱敏系统(简称VS-DM),通过截获并修改数据库通讯内容,对数据库中的敏感数据进行在线的屏蔽、变形、字符替换、随机替换等处理,达到对用户访问敏感数据真实内容的权限控制。对存储于…

MySQL 脱敏函数

项目场景: 示例:项目涉及到敏感数据,例如手机号、姓名等使用mysql存储函数解决。 解决方案: 提示:以下主要使用mysql函数CONCAT、LEFT、RIGHT。 1、CONCAT(str1,str2,…) CONCAT()函数返回结果为连接参数产生的字符串。如有任…

跨数据库跨系统,数据脱敏有新招

作者介绍 贝壳找房DBA团队,负责链家、贝壳找房的数据库服务治理及运维,包括MySQL、Redis、Kafka、RocketMQ、TiDB等产品。为保证线上服务高效、安全、稳定运行,面向研发同学提供一站式的数据库操作平台,建设了满足99.99%标准的高可…

imperva数据库脱敏-server2008

首先安装一个server2008其他的server也行 然后安装java环境 后安装tomcat中间件 一路默认就好 这就是tomcat的控制台 然后安装postgresql数据库 官方的要求是9.1-9.3的版本。 这个数据库也是默认安装就好。里面的密码我设的的Webco123 数据库安装完成 下一步安装发现脱敏的控…

《Sharding-JDBC》——数据库分表+数据库脱敏实现方案

本文从实际情况出发,解决生产中单表数据过大,和数据被拖库导致的问题,并进行的解决方案。本案例使用的框架为轻量型的jfinal,分表数据库脱敏,均采用了Apache的shardingsphere。 首先我们要先明确这样一个业务场景&…

mysql数据脱敏_数据脱敏|静态脱敏|动态脱敏—数据库脱敏_产品

1、敏感数据自动识别 数据脱敏系统可通过预定义敏感数据特征库,在任务执行过程中通过智能匹配识别敏感数据,最大限度的实现脱敏工作自动化,简化以手工方式按字段名定义敏感数据的繁琐工作。 2、丰富的脱敏算法 数据脱敏系统内置同义替换、数据…

使用sql语句对数据库脱敏

最近帮领导整理了一下数据库,给数据库的某些字段进行脱敏,现在整理一下,嘻嘻 1、姓名脱敏 update table set 列 REPLACE(列,SUBSTR(列,2,1),*) 姓名脱敏之后的效果: 2、手机号脱敏 UPDATE table SET 列 ( CASE WHEN 列 IS NO…

数据库脱敏(mybatis 拦截器实现)

1.使用数据库本身自有的函数进行加密 UPDATE tuc_user SET mobileNo HEX(AES_ENCRYPT(mobileNo, ‘xxxxxx’)); 2.注解类 2.1 SensitiveData package com.wisedu.campuses.sensitive;import java.lang.annotation.*;/*** author MR.MEI*/ Inherited Target({ElementType.T…

数据库安全关键技术之数据库脱敏技术详解

数据库脱敏是一种采用专门的脱敏算法对敏感数据进行变形、屏蔽、替换、随机化、加密,并将敏感数据转化为虚构数据的技术。按照作用位置、实现原理不同,数据脱敏可以划分为静态数据脱敏(Static Data Masking, SDM )和动态数据脱敏(…

网页数据库设计

这次是找一个网页,写er图,然后根据er图设计模型,然后生成数据库表 我找的是起点中文网,根据这个网站做了分析,画了e-r图. 模型