热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网站性能优化利器:LightHouse全面检查各项指标,多种优化方案可选

检查网站性能过程全局安装lighthousenpminstall-glighthouse然后输入你的页面lighthousehttps:example.comlighthou

检查网站性能过程

全局安装 lighthouse

npm install -g lighthouse

然后输入你的页面

lighthouse https://example.com

lighthouse 会自动生成 HTML 报告,你也可以使用 JSON 格式。

生成报告如下:
在这里插入图片描述
解读各项指标含义:


  1. FCP (First Contentful Paint):渲染第一个元素(文本、图片、canvas…)的时间点
  2. SI (Speed Index):首屏展现时间
  3. LCP (Largest Contentful Paint):渲染可视区域内最大内容元素的时间点
  4. TTI (Time to Interactive):页面资源加载成功并能响应用户交互的时间点
  5. TBT (Total Blocking Time):FCP到TTI之间,主线程被long task(超过50ms)阻塞的时间之和
  6. CLS (Cumulative Layout Shift):累计布局偏移值

三个维度进行评估:


  • [加载情况] : LCP
  • [交互性] : FID
  • [视觉稳定性] : CLS

改善建议:
在这里插入图片描述


优化方案

主要以性能指标作为维度,主要分为以下几个点:


  • 视觉稳定性 (Cumulative Layout Shift)
  • 加载情况 (Largest Contentful Paint)
  • TTI (Time to Interactive)
  • TBT (Total Blocking Time)
  • FCP (First Contentful Paint)

优化过程

1、自定义字体文件加载期间保持可见状态


斜体样式改善建议里提到使用CSS font-display属性确保自定义字体文件在加载期间可见.


在这里插入图片描述


这是因为网站下载自定义字体文件需要一段时间,而不同浏览器此时的行为是不同的.一些浏览器在加载自定义字体时会隐藏文字,这种称之为FOIT(Flash Of Invisible Text).而一些浏览器会显示降级字体,这种情况称之为FOUT(Flash Of Unstyled Tex).这两种行为会导致"字体闪烁问题",影响视觉稳定性 (CLS).



我的处理方法是直接设置font-display:swap;这个属性能确保字体在加载时间可见.虽然还是会引发FOUT,但是相比FOIT,FOUT对视觉稳定性的影响会小一些.


@font-face {font-family: 'ping-fang';src: url('../font/Hello-World.otf') format('OpenType');/* swap:如果设定的字体还未可用,浏览器将首先使用备用字体显示,当设定的字体加载完成后替换备用字体 */font-display:swap;}

2、避免使用document.write()


使用document.write()会使页面内容的显示延迟数十秒,这对于连接速度较慢的用户而言尤其成问题。因此,Chromedocument.write()在很多情况下都会阻止执行,这意味着不能依赖它。


在这里插入图片描述


我的办法是删除代码中document.write()的所有用法。如果用于注入第三方脚本,请尝试使用异步加载。


3、最小化主线程工作


浏览器的渲染器过程将代码转换为用户可以与之交互的网页。默认情况下,渲染器进程的主线程通常处理大多数代码:它解析HTML并构建DOM,解析CSS并应用指定的样式,并解析,评估并执行Javascript。


在这里插入图片描述
如上图所示,Lighthouse标记了在加载期间使主线程保持忙于4秒钟以上的页面


我们的目标就在如何最大限度地减少主线程的工作,可以从以下几个方面进行优化:

脚本评估

  • 优化第三方Javascript
  • 消除输入处理程序
  • 使用web workers

样式和布局

  • 减少样式计算的范围和复杂性
  • 避免大型,复杂的布局

解析HTML和CSS

  • 提取关键CSS
  • 缩小CSS
  • 推迟非关键CSS

脚本解析和编译

  • 通过代码拆分减少Javascript负载
  • 删除未使用的代码

垃圾收集

  • 使用measureMemory()监视网页的总内存使用情况

4、避免大量的网络负载


大型网络有效负载与较长的加载时间高度相关。它们也使用户花钱;例如,用户可能需要为更多的蜂窝数据付费。因此,减少页面的网络请求的总规模有利于你的用户在网站上的经验和自己的钱包。


在这里插入图片描述

Lighthouse显示页面请求的所有资源的总大小(以kib为单位)。

根据HTTP存档数据,网络有效负载的中位数在1,700到1,900 KiB之间。为了帮助显示最高的有效负载,Lighthouse标记了总网络请求超过5,000 KiB的页面。


降低有效负载大小目的:
使总字节大小<1,600 KiB。此目标基于理论上可以在3G连接上下载的数据量&#xff0c;同时仍实现10秒钟或更短的交互时间。



方法如下&#xff1a;
1、将请求推迟到需要时再发送。有关一种可能的方法&#xff0c;请参阅PRPL模式。
2、优化请求以使其尽可能小。
可能的技术包括&#xff1a;最小化和压缩网络负载、对图像使用WebP而不是JPEG或PNG、将JPEG图像的压缩级别设置为85。
3、缓存请求&#xff0c;以使页面在重复访问时不会重新下载资源。


5、减少Javascript执行时间

当Javascript执行时间超过2秒时&#xff0c;Lighthouse将显示警告。执行时间超过3.5秒时&#xff0c;审核将失败&#xff1a;
在这里插入图片描述


如何加快Javascript执行 &#xff1a;
1、 仅通过实现代码拆分来发送用户所需的代码。
2、缩小并压缩代码。
3、删除未使用的代码。
4、通过使用PRPL模式缓存代码来减少网络旅行。


6、避免链接关键请求


链的长度越大&#xff0c;下载大小越大&#xff0c;对页面加载性能的影响就越大。


Lighthouse报告了具有较高优先级的关键请求&#xff1a;
在这里插入图片描述


如何降低关键的请求链的对性能的影响
1、尽量减少关键资源的数量&#xff1a;消除它们&#xff0c;推迟其下载&#xff0c;将其标记为async&#xff0c;依此类推。
2、优化关键字节的数量以减少下载时间&#xff08;往返次数&#xff09;。
3、优化剩余关键资源的加载顺序&#xff1a;尽早下载所有关键资产&#xff0c;以缩短关键路径的长度。



推荐阅读
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 前端性能优化无损压缩webp格式的图片
    一、什么是webpWebP格式,谷歌开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的23,并能节省大量的服务器宽带资源和数据空 ... [详细]
author-avatar
木宁xuan_
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有