利用LightHouse进行合理的页面性能优化,看这一篇就够了!

news2024/11/24 10:53:55

利用LightHouse进行合理的页面性能优化,看这一篇就够了!

  • 前言
  • 一. Lighthouse下载
    • 1.1 相关指标概念
    • 1.2 Lighthouse 优化建议
  • 二. 跟着 Lighthouse 进行性能优化
    • 2.1 Enable text compression 开启文本压缩
    • 2.2 Resize images 重新设定合适大小的图片
    • 2.3 Eliminate render-blocking resources 消除非关键资源
    • 2.4 Diagnostics 需要进一步调试的复杂诊断
  • 三. 页面性能优化总结

前言

Lighthouse是一款由Google开发的开源工具,用于评估Web应用程序的性能和质量。它可以分析Web应用程序的加载速度、渲染性能、可访问性、可用性和最佳实践等方面,提供详细的报告和建议。

官网

一. Lighthouse下载

1.谷歌打开设置,搜索输入商店:
在这里插入图片描述
2.下载Lighthouse
在这里插入图片描述
3.我们从官网上下载一个Demo案例,结合Lighthouse的使用来看看项目是如何一步步优化的。官网Demo

点击右上角的Remix
在这里插入图片描述
点击完后,点击左上角的Glitch图标,然后就能看到你自己备份出来的项目,点击下载即可:
在这里插入图片描述

4.项目下载完后,解压后目录如下:以防万一可以把package-lock文件给删掉。然后执行npm i
在这里插入图片描述
安装完依赖之后,启动项目:

npm run start

访问页面:http://localhost:1234/
在这里插入图片描述

到这里,前期准备工作也就完成了,那么进行项目优化练习之前,我们先来回顾几个指标的知识点。

1.1 相关指标概念

我们打开控制台(F12),可以看到有一个Lighthouse选项:
在这里插入图片描述

来说一下Lighthouse的分类:

  • Performance:该选项用于评估Web应用程序的性能。它会分析页面加载时间、资源大小、缓存策略等因素,并给出相应的建议和优化方案。
  • Accessibility:该选项用于评估Web应用程序的可访问性。它会检查页面是否符合WCAG(Web Content Accessibility Guidelines)标准,并给出相应的建议和优化方案。
  • Best practices:该选项用于评估Web应用程序是否符合最佳实践。它会检查页面是否存在常见的问题,例如安全问题、SEO问题等,并给出相应的建议和优化方案。
  • SEO:该选项用于评估Web应用程序的搜索引擎优化情况。它会检查页面是否符合搜索引擎的要求,例如页面标题、meta标签等,并给出相应的建议和优化方案。
  • Progressive Web App:选项用于评估Web应用程序是否符合渐进式Web应用程序(PWA)的标准。它会检查页面是否具有离线访问、添加到主屏幕等功能,并给出相应的建议和优化方案。

常规情况下,我们重点关注第一个Performance,我们只勾选它,然后点击分析(同时选择Web):
在这里插入图片描述
分析完之后,我们看下评分:
在这里插入图片描述

这里面有几个指标:

  • FCP(First Contentful Paint)白屏时间,第一次有内容呈现在用户屏幕上的时间点。
  • TTI(Time to Interactive)第一次可流畅交互的时间。
  • SI(Speed Index):是一个衡量Web页面加载速度的指标,它表示页面在加载过程中的视觉稳定性。Speed Index越低,表示页面加载速度越快,用户体验越好,视觉稳定性得分是根据页面中元素的位置和大小变化来计算的,变化越大得分越高,变化越小得分越低。
  • TBT(Total Blocking Time):它是指在FCPTTI之间,所有超过50毫秒的任务时间总和,以毫秒为单位。

当页面开始呈现内容(FCP)后,用户可以开始与页面进行交互,直到页面完全加载并响应用户操作(TTI)。在这个过程中,浏览器需要执行多个任务,例如解析HTML、加载CSSJavaScript文件、渲染页面等。如果某个任务的执行时间超过50毫秒,就会对页面的加载速度和性能产生负面影响。

  • LCP(Largest Contentful Paint):指页面渲染出最大文本或图片的时间。
  • CLS(Cumulative Layout Shift):布局偏移情况,当页面中的元素位置发生变化时,浏览器需要重新计算页面的布局,从而增加页面加载时间。如果页面中的元素位置变化过于频繁,会导致页面加载时间过长,影响用户体验和SEO排名。

同时,我们还能看到静态资源的利用率情况:点击View Treemap
在这里插入图片描述
如图:
在这里插入图片描述

1.2 Lighthouse 优化建议

接下来我我们可以看下Opportunities这个节点下面的信息:它主要提供的是简单的、易于实现的优化建议。

在这里插入图片描述
例如:

  • Enable text compression:建议开启文本压缩。
  • Resize images:使用合适大小的图片。
  • Eliminate render-blocking resources:消除非页面加载时关键的js、css资源。

二. 跟着 Lighthouse 进行性能优化

2.1 Enable text compression 开启文本压缩

我们看下压缩前的相关资源大小:
在这里插入图片描述
紧接着,我们在项目的server.js文件中添加以下代码:

const compression = require('compression'); 
app.use(compression());

如图:
在这里插入图片描述

重新打包编译后,再次启动项目,我们看下压缩后的相关资源:
在这里插入图片描述
我们再次跑一下Lighthouse,发现评分上来了:
在这里插入图片描述
同时也没有了相关的建议(因为已经被我们优化掉了)
在这里插入图片描述

2.2 Resize images 重新设定合适大小的图片

优化前我们看下:加载这些静态图片,用了4.4秒,
在这里插入图片描述
我们尝试把图片的大小变得小一点,我们更改项目中src/model.js文件:

const dir = 'small';

如图:
在这里插入图片描述
重新启动项目,查看对应评分:
在这里插入图片描述
评分又上来了,并且之前的更换图片尺寸建议已经消失。

2.3 Eliminate render-blocking resources 消除非关键资源

我们看下一个建议:
在这里插入图片描述
这里面提到了,lodash.jsjquery.js两个文件是首次加载时的非关键的资源,但是我们实际看到这样的建议之后,可能会想,万一它的建议有问题那怎么办?

我们需要证明,页面加载的时候,哪些js被用到了,哪部分代码没有被使用。

  1. 谷歌浏览器,打开控制台。

  2. ctrl+shift+p打开Command Menu.
    在这里插入图片描述

  3. 输入coverage
    在这里插入图片描述

  4. 然后底部出现一个新的控制台:
    在这里插入图片描述

  5. 重新刷新页面:
    在这里插入图片描述
    我们发现,这两个js页面确实用到了,但它们一定就是关键资源了吗?我们需要继续往后验证。

  6. ctrl+shift+p,输入blocking
    在这里插入图片描述

  7. 我们在左下角点击 + 号,添加阻塞规则:
    在这里插入图片描述

  8. 如图所示,我们先把jquerylodash两个文件给禁止掉了,发现页面依旧可以运行,如果把bundle也给禁止掉,页面直接白屏不可用。去除禁止,则恢复使用。
    在这里插入图片描述

可以看到我们结合Chrome的控制台命令进行校验,哪些JS文件被禁止加载了,页面也依旧可以正常展示。那么对于这类非关键资源,即页面首次加载并不需要它的文件,我们可以将其改为异步加载。

那么我们找到template.html文件,删除里面对这两个JS的引用:
在这里插入图片描述

也可以把它们改为异步加载,增加defer标识:
在这里插入图片描述

重新运行项目并跑一次Lighthouse,查看评分:(就高了一分不明显)
在这里插入图片描述
可以看到,相关的建议也没了:
在这里插入图片描述

2.4 Diagnostics 需要进一步调试的复杂诊断

如图:Lighthouse里面还有Diagnostics 相关的专栏,这一部分的建议都是需要我们开发者通过调试来分析诊断的。
在这里插入图片描述

我们可以这样做:

  1. 利用Chrome的开发者工具,打开控制台,选择Performance ,然后选择左上角的start按钮。
    在这里插入图片描述
    2.进行相关参数的配置:
    在这里插入图片描述
  2. 查看哪些JS的运行时间特别长:
    在这里插入图片描述

这里我们发现有一个叫mineBitcoin的函数,执行时间占了70%。我们看下项目中是否有这段代码,看看他干了啥:
在这里插入图片描述

那么我们把这段代码给删了。同时我们设置打包的时候,模式为生产者模式。(webpack.config.js文件)添加如下代码:

mode:"production",

如图:
在这里插入图片描述

重新编译项目,重新启动然后跑Lighthouse
在这里插入图片描述

可以看到,分数直接飙升到99。

三. 页面性能优化总结

  1. JS资源的大小来看:减少JS的体积。我们可以开启minify压缩。或者删除一些无用的代码。
  2. 从加载方式角度来看:一些非关键资源,开启异步加载,预加载、按需加载、延迟加载等。
  3. 从请求协议角度来看:我们可以减少Http请求次数,并且可以使用Http2.0,因为它是异步非阻塞的。

这里需要重点说明下,如果是Chrome浏览器,默认会给你限制住6个文件数量的请求并发,针对http1,因此如果你有12个文件,就会分成2个批次去请求资源。但是如果你是http2.0的话,就会同时请求这12个文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/766970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java阶段五Day08

Java阶段五Day08 文章目录 Java阶段五Day08内容回顾学习内容目的自动配置原理SPI-API:一对类似的概念 自定义Starter属性配置问题 网关组件SpringCloud Gateway网关架构微服务网关介绍Spring Cloud Gateway(技术选型)网关转发入门案例明确案例需求实现案…

学习系统编程No.31【多线程互斥与同步】

引言: 北京时间:2023/7/16/14:32,摆烂至今,在耍这方面,谁能比我行,哈哈哈,乐观!欠了一堆课要补,等我们把线程相关知识学完,对于系统编程方面我们搞定的就差不…

二分类结局变量Logistic回归临床模型预测——分训练集和测试集(完结)

1. 介绍 2. 基线特征 3. 单因素多因素logistic回归分析及三线表 4. 构建临床列线图模型 5. 模型评价 6. 外部数据集验证 7. 另一种发文章的办法,分训练集和测试集,分析上述3-6节的内容 这里就讲一下如何分训练集和测试集,其余的步骤和之前是一样的,分训练集和测试集用…

Fiddler网络调试器,抓包工具供大家学习研究参考

Fiddler 是一个 http 协议调试代{过}{滤}理工具,它能够记录并检查所有你的电脑和互联网之间的 http 通讯,设置断 点,查看所有的“进出”Fiddler 的数据(指 cookiehtmljscss等文件)。 Fiddler 要比其他的网络调试器要更加简单,因为…

从Vue2到Vue3【零】——Vue3简介

系列文章目录 内容链接从Vue2到Vue3【零】Vue3简介及创建 文章目录 系列文章目录前言一、Vue3的发布带来了什么1.1 性能提升1.2 源码升级1.3 支持TypeScript1.4 新特性1.5 支持 vue3 的UI组件库 二、创建Vue3.0工程2.1 什么是Vite2.2 利用Vite创建Vue3.0工程2.3 利用vue-cli脚…

下载最新版 VC_redist.x86.exe / VC_redist.x64.exe for Visual Studio 2015, 2017, 2019, and 2022

目录 1、如何处理程序需要的C/C运行时库? 2、VC_redist.x64.exe的主界面以及支持的命令行参数 3、到微软官网上下载最新版本的VC_redist.x86.exe / VC_redist.x64.exe VC常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...&a…

总结几个GPT的超实用之处【附带Python案例】

GPT(Generative Pre-trained Transformer)是人工智能领域中最受欢迎的预训练语言模型之一,由OpenAI开发。该模型使用深度学习技术,可以自动生成各种文本,如文章、日记、小说等。GPT的超实用之处有很多,下面…

【Ubuntu 20.04LTS系统】安装CUDA11.8、cuDNN,可进行CUDA版本切换

Ubuntu 20.04LTS系统安装CUDA11.8、cuDNN,可进行CUDA版本切换 1. 更改为清华源并更新软件列表和依赖项2. 安装CUDA3. 安装cuDNN4. CUDA版本切换 1. 更改为清华源并更新软件列表和依赖项 https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/ # 默认注释了源码镜像以提…

java项目之毕业生就业信息管理系统(ssm+mysql+jsp)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的毕业生就业信息管理系统。技术交流和部署相关看文章末尾! 开发环境: 后端: 开发语言:Java …

哇~真的是你呀!今天是LINUX中的SSH服务。

目录 前言 一、概述 二、身份验证机制及验证过程 三、加密机制 四、基本参数 五、基本操作 六、操作 前言 SSH(Secure Shell)是一种加密网络协议,用于远程登录和安全传输数据。在Linux系统中,SSH服务是一种常见的远程管理工具&am…

python copy.copy与copy.deepcopy 区别

结论 b a.copy(): 浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。 b copy.deepcopy(a): 深拷贝, a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。 import copy origin [1, 2, [3, 4]]…

CS拒绝连接,Cobalt Strike连接失败,Cobalt Strike使用方法(二)

本文主要介绍Cobalt Strike的界面及使用方法。 界面 菜单介绍 Cobalt Strike New Connection // 新建连接,可连接多个服务器端 Preferences // 设置Cobal Strike界面、控制台、以及输出报告样式、TeamServer连接记录 Visualization // 主要展…

精益生产有哪些管理工具?

精益生产有哪些管理工具? 一、什么是精益生产 智能制造是落实我国制造强国战略的重要举措,加快推进智能制造,是加速我国工业化和信息化深度融合、推动制造业供给侧结构性改革的重要着力点,对重塑我国制造业竞争新优势具有重要意义…

java项目---2048

目录 游戏介绍 游戏玩法 全代码 (1)Main类: (2)GamePanel类 (3)Card类 (4)GameFrame类 项目设计思路 1.绘制一个窗口 2.创建菜单 3.创建所有空白卡片 &…

项目经理在日常管理工作中需要注意什么?

项目管理的核心在于以项目经理为主导的团队协作,项目经理需要管理团队成员,保障团队的产出和效能。因此,项目经理需要具备多种能力,如沟通能力、管理能力、洞察人心的能力等,才能有效推动项目进展。 1、制定计划是项…

如何更改idea的背景,以及显示某些属性

idea项目无法正常显示的问题 在idea中右侧的属性都不存在的解决方法,或左边的不显示,我浏览了很多的文章才找到的解决办法,在这里分享给大家 就可以显示出来了,因为我原来已经显示了,当我取消后就看不到了 修改背景 1.先进入到设置的页面 选择完成后点击ok把设置关了就设置成功…

Java开发 - 深入理解Redis哨兵机制原理

前言 Redis的主从、哨兵模式、集群模式,在前文中都已经有了详细的搭建流程,可谓是手把手教程,也得到了很多朋友的喜欢。由于前文偏向于应用方面,就导致了理论知识的匮乏,我们可能会用了,但却不明所以&…

基于STM32的homeassistant(采用FreeRTOS操作系统)【第三章:HA服务器搭建、数据展示】

第三章开发环境 硬件设备STM32与各类传感器(与前两章一致)服务器设备腾讯云(阿里云等云服务器或自建服务器端均可)移植环境Homeassistant、EMQ 具体实现方案 视频教程 homeassistant配置MQTT集成以及传感器实体(ST…

C语言程序设计——结构体、枚举、联合

一、结构体 1. 概念 结构体是一种自定义的数据类型,它是一些值的集合,这些值称为成员变量,结构体由多个数据成员组成,这些成员可以是不同类型的变量。 2. 结构体的声明 2.1 一般声明 struct student {char name[10];int age; …

Nginx系列之 一 反向代理

目录 Nginx系列之 一 入门_开着拖拉机回家的博客-CSDN博 一、Nginx概述 二、反向代理 2.1 正向代理 2.2 反向代理 三、反向代理实战 3.1测试服务器 3.2 配置文件说明 3.3 反向代理实战案例一 1、目的 2、具体实现 3.4 反向代理实战案例二 1、目的 2、具体实现 入…