转载:https://mp.weixin.qq.com/s?src=11&timestamp=1618929340&ver=3020&signature=oXyx*RDLXjN-81ZqL1bItojtvV2Mz40kJP64iM*aj*g7b*xuLna5zVSalUb4jgdTtr7iwAJjSvTUeGmwpitFMfoyIb9nJ8R7nylHkZlToBZegIT1rj*P*jKv8CgSf1G*&new=1

前言

最近做性能检测工具,很多知识点不清楚,打算查缺补漏,补一补。

接下来从官方提供的性能检测工具Lighthouse(灯塔)开始我们的学习,简单介绍了下Lighthouse的一些点。

阅读完本文,你可以了解到

  • Lighthouse 是什么。
  • 如何快速上手Lighthouse (使用入门)。
  • Lighthouse中的一些Metrics指标。

Lighthouse 是什么

官方对它的解读:

Lighthouse 是一个开源的自动化工具,用于改进网络应用的质量。您可以将其作为一个 Chrome 扩展程序运行,或从命令行运行。您为 Lighthouse 提供一个您要审查的网址,它将针对此页面运行一连串的测试,然后生成一个有关页面性能的报告。

它是如何工作的呢?

如果你跟我一样,翻过它的代码,看过它的介绍肯定很懵逼,它的代码依赖性如下:

lighthouse内部模块依赖

感兴趣的可以看看它的仓库,参考链接已经给出。

https://github.com/GoogleChrome/lighthouse

使用入门

运行 Lighthouse 的方式有两种: 作为 Chrome 扩展程序运行,或作为命令行工具运行。Chrome 扩展程序提供了一个对用户更友好的界面,方便读取报告。命令行工具允许您将 Lighthouse 集成到持续集成系统。

Chrome 扩展程序

下载 Google Chrome 52 或更高版本。

安装 Lighthouse Chrome 扩展程序。

地址:https://chrome.google.com/webstore/detail/lighthouse/blipmdconlkpinefehnmjammfjpmpbjk

点击 Generate report 按钮以针对当前打开的页面运行 Lighthouse 测试。

命令行工具

Node CLI在配置和报告Lighthouse运行情况方面提供了最大的灵活性。如果用户需要更多的高级功能,或者想自动运行Lighthouse,可以使用Node CLI。安装 Lighthouse 作为一个全局节点模块。

安装:

npm install -g lighthouse
# or use yarn:
# yarn global add lighthouse

针对一个页面运行 Lighthouse 审查。

lighthouse https://www.example.com --view

传递 --help 标志以查看可用的输入和输出选项。

lighthouse --help

对于一些options不清楚的,可以点击这个链接:

https://github.com/GoogleChrome/lighthouse#cli-options

假设我们审查后,就会有这么一个结果:

New metrics

可以看到一共6个Metrics,Lighthouse 6.0在报告中引入了三个新指标。其中两个新的指标--最大内容画(LCP)和累积布局偏移(CLS)--是Core Web Vitals的实验室实现。

那么接下来,我们看看这些Metrics指标的含义。

几个Metrics指标

First Contentful Paint (FCP)

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

FCP

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

你会注意到,虽然部分内容已经呈现,但并非所有内容都已呈现。这是First Contentful Paint (FCP)和Largest Contentful Paint (LCP)之间的一个重要区别--LCP的目的是衡量页面的主要内容何时完成加载。

知道了概念,如何衡量FCP呢,我们可以接触的有Field toolsLab tools

要在JavaScript中测量FCP,你可以使用Paint Timing API。下面的例子展示了如何创建一个PerformanceObserver,该PerformanceObserver监听名称为first-contentful-paint的油漆条目,并将其记录到控制台。

new PerformanceObserver((entryList) => {
  for (const entry of entryList.getEntriesByName('first-contentful-paint')) {
    console.log('FCP candidate:', entry.startTime, entry);
  }
}).observe({type: 'paint', buffered: true});

Speed Index

速度指数是Lighthouse报告中性能部分跟踪的六个指标之一。每项指标都能反映出页面加载速度的某些方面。

那么它是如何检测的呢?

速度指数衡量的是内容在页面加载过程中的视觉显示速度。Lighthouse首先会在浏览器中捕获一段页面加载的视频,并计算出各帧之间的视觉进度。然后,Lighthouse使用Speedline Node.js模块来生成速度指数得分。

至于具体的计算,可以参考GitHub里面的代码,这里就不展开了。

那么我们有机会提升它的性能吗?

利用Lighthouse报告中的 "Opportunities "部分来确定哪些改进对你的页面最有价值。机会越重要,对性能评分的影响就越大。例如,下面的Lighthouse截图显示,消除渲染阻塞资源将带来最大的改善。

Speed index

Largest Contentful Paint (LCP)

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

LCP

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

更多信息,请观看Paul Irish对LCP的深度剖析。

https://www.youtube.com/watch?v=diAc65p15ag

Cumulative Layout Shift (CLS)

官方对它的解释:

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

简单理解就是:

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

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

https://web.dev/cls/

CLS

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

Total Blocking Time (TBT)

我们看看官方对它的解读:

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

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

需要更多的了解,可以参考链接:

https://web.dev/tbt/

最新评分标准

Lighthouse中的性能得分是由多个指标加权混合计算出来的,总结出一个页面的速度。6.0的性能得分公式如下。

Phase Metric Name Metric Weight
Early (15%) First Contentful Paint (FCP) 15%
Mid (40%) Speed Index (SI) 15%
  Largest Contentful Paint (LCP) 25%
Late (15%) Time To Interactive (TTI) 15%
Main Thread (25%) Total Blocking Time (TBT) 25%
Predictability (5%) Cumulative Layout Shift (CLS) 5%

那么你是不是会跟我一样,有疑问,我们不能修改这个权重嘛,当然可以试一试:

https://googlechrome.github.io/lighthouse/scorecalc/

点击上面的链接,会展示这个一个画面:

scoring calculator

这个网站发布了一个评分计算器,帮助你了解性能评分。同时,该计算器还能为你提供Lighthouse 5版和6版的评分比较。当你使用Lighthouse 6.0版本进行审计时,报告中会有一个链接,链接到计算工具,并将结果填入其中。

性能检测工具之Lighthouse的更多相关文章

  1. 在debug模式下引入一些性能检测工具

    我们经常在debug模式下使用一些性能检测工具,例如blockCannary,leakCannary.Stetho等,但是我们release的时候又不需要这些检测工具,通常情况下我们的做法是在buil ...

  2. Sql性能检测工具:Sql server profiler和优化工具:Database Engine Tuning Advisor

    原文:Sql性能检测工具:Sql server profiler和优化工具:Database Engine Tuning Advisor 一.工具概要     数据库应用系统性能低下,需要对其进行优化 ...

  3. 好用的性能检测工具-性能监控工具- Glances

    平常我经常使用 htop 工具来进行对主机进行性能检测.但是它只能对 进行进行管理.并简要显示 进程和cpu和内存使用信息:性能监控工具: glances 是比较好的性能检测工具.相比较htop还能显 ...

  4. 推荐AndroidGodEye Android性能检测工具

    推荐AndroidGodEye Android性能检测工具 1 介绍 AndroidGodEye是一个可以在PC浏览器中实时监控Android性能数据指标的工具,你可以通过wifi/usb连接手机和p ...

  5. 性能检测工具介绍-Linux系统命令行

    本文介绍的关于Linux自带命令进行性能检测的介绍,详细介绍这些linux自带的工具的使用. 一.uptime uptime命令的显示结果包括服务器已经运行了多长时间,有多少登陆用户和对服务器性能的总 ...

  6. linux服务器性能检测工具nmon使用

    今天介绍一款linux系统服务器性能检测的工具-nmon及nmon_analyser (生成性能报告的免费工具),亲测可用. 一.介绍 nmon 工具可以帮助在一个屏幕上显示所有重要的性能优化信息,并 ...

  7. java 性能检测工具 检测死锁等

    死锁检测方法 1 JConsole 找到需要查看的进程,打开线程选项卡,点击检测死锁 2 jps查看java进程ID,使用jstack  7412输出信息 3 使用jvisualvm连接java虚拟机 ...

  8. EF性能检测工具MiniProfilerEF6的使用

    一.在VS项目中分别安装包MiniProfiler.MiniProfiler.EF6.MiniProfiler.MVC4 二.在Global.asax文件的Application_BeginReque ...

  9. web性能检测工具lighthouse

    About Automated auditing, performance metrics, and best practices for the web. Lighthouse 可以自动检查Web页 ...

  10. 好用的前端页面性能检测工具—sitespeed.io

    引言 最近在做HTTP2技术相关调研,想确认一下HTTP2在什么情境下性能会比HTTP1.x有显著提升,当我把http2的本地环境(nginx+PHP)部署完成后进行相关测试时,我遇到了以下问题: ( ...

随机推荐

  1. Atziluth's Last Contest. 001题解

    被dalaoYHH爆虐 问题 H:mcd 题目描述 给出两个长为 \(n\) 的数列 \({a_n},{b_n}\),保证 \(a_i\le b_i(i=1,2,\cdots,n)\). 现在您需要对 ...

  2. webpack系列-externals配置使用(CDN方式引入JS)

    如果需要引用一个库,但是又不想让webpack打包(减少打包的时间),并且又不影响我们在程序中以CMD.AMD或者window/global全局等方式进行使用(一般都以import方式引用使用),那就 ...

  3. jsoncpp安装与使用 cmake安装 升级g++ gcc支持c++11

    来了新公司之后,现在的json解析真的很难用,举个例子,假如想删除一个对象,要重新生成,去掉要删除的,其余的要组装上.很怀念之前用的jsoncpp,想引进来,就研究一下. 下载和安装 下载 从gith ...

  4. CSS – Tailwind CSS

    前言 很多时候 CSS 未必是需要管理的, 比如做网站, Landing Page (类似宣传单). 很多时候做了 > 用了 > 丢 > 再做新的. 它没有 "维护&quo ...

  5. MyBatis——案例——查询-多条件查询-动态条件查询(关键字 if where)

    动态条件查询   SQL语句会随着用户的输入或外部条件的变化而变化,我们称为 动态SQL   MyBatis 对动态SQL有很强大的支撑:   if   choose(when,otherwise) ...

  6. 向量法求 T3 这个若智 r^2

    int sqr_vector_dis(node a){ return a.x*a.x+a.y*a.y; } frac vector_multi(node a,node b){ return frac( ...

  7. Go语言中JSON标签的用法与技巧

    在Go语言中,JSON标签(JSON tags)是用来指定结构体字段在序列化为JSON时的名称和行为的.JSON标签通常写在结构体字段的后面,用反引号(`)括起来.以下是一些常用的JSON标签: js ...

  8. 高通pmic voter机制

    前不久在高通 SDM450 平台接触了 voter 机制(投票机制).最近终于得空,结合一个问题简单研究了一下.现将研究流程简单记录一下,由于时间有限,所以是实用为目的,没有做详细的分析,不过结合着这 ...

  9. 最详细CentOS7.6安装openGauss5.0.3教程

    一.环境准备 1.1 主机信息 项目 内容 操作系统 CentOS7.6 IP 192.168.4.201 主机名 opgs201 CPU 8core 内存 16GB 磁盘1 100GB 1.2 操作 ...

  10. KubeSphere 迈向新的里程碑 —— 10000 颗星星!

    喜大普奔,开源项目 KubeSphere 于近期在 "云原生分布式操作系统" 的征程中迈入新的里程碑 -- GitHub Star 数量突破 10,000! 真心感谢每一位贡献者. ...