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

网站性能优化

Lighthouse性能分析 1、Lighthouse Performance与“指标”和“诊断结果”之间的关系指标对LighthousePerformance有直接关系,而优化诊

Lighthouse 性能分析

 

1、Lighthouse Performance与“指标”和“诊断结果”之间的关系

指标对 Lighthouse Performance 有直接关系,而优化诊断结果和建议可能会改善指标值,因此与Lighthouse Performance 存在间接关系。

 

 

2、Lighthouse Performance 如何加权

 

 

V8:

 

Total Blocking Time:30%           First Contentful Paint: 10%

 

Largest Contentful Paint:25%       Speed Index:10%  

 

Cumulative Layout Shift:15%        Time to Interactive:10%

 

各项指标介绍和达标范围:

 

 

 

 

 

 

各项指标详解和解决方案:

 

TBT: 总阻塞时间(xx-50ms) FCP 和 TTI 之间发生的每个长任务的阻塞时间总和。

 

长任务:主线程运行超过50ms的任务视为长任务,主线程被视为“阻塞状态”

 

 

 

 

 

 

导致长任务原因:

 

1、 不必要的 Javascript 加载、解析或执行

2、低效的JS语句

 

如何改进:

 

A、 减少第三方代码影响 (总阻塞时间 <250ms)

 

1、 移除不必要的第三方脚本

 

2、async 和 defer 属性应用

 

  a)      async属性:脚本网络请求是异步的,不会阻塞浏览器解析HTML, 下载完成后,如此时HTML还没解析完,暂停HTML解析,执行该脚本,再后续解析HTML。(可能会阻塞HTML解析)

  

  b)     defer属性:脚本网络请求时异步的,并在HTML解析完成之后即DomContentLoad事件之前执行。(不会阻塞HTML解析)

 

    

3、 Intersection Observer 实现对其进行延迟加载

 

 

B、 减少Javascript 执行时间 ( <2s ) 

  1、 代码拆分,按需加载

  2、 压缩代码

  3、 删除未使用的代码

 

C、 最小化主线程工作   (js解析引擎机制:https://www.kancloud.cn/xiaoyulive/system/598718)

  优化图像:

  选择正确的图像格式

  使用Imagemin压缩图片

  提供响应式图像

  提供具有正确尺寸的图像

  使用 WebP 图像

  使用图片 CDN 优化图片

  延迟加载图片和视频:

  使用延迟加载提高加载速度

  延迟加载图片

  延迟加载视频

  优化Javascript:

  通过代码拆分减少 Javascript 负载

  删除未使用的代码

  缩小和压缩网络负载

  CommonJS 如何让你的包变得更大 (https://web.dev/commonjs-larger-bundles/)

 

  优化CSS:

  推迟非关键 CSS

  缩小 CSS

  提取关键 CSS

  使用媒体查询优化 CSS 背景图像

 

  优化第三方资源:

  第三方 Javascript 性能

  识别缓慢的第三方 Javascript

  高效加载第三方 Javascript

  优化WebFonts:

  在字体加载期间避免不可见的文本(font-display)

  优化 WebFont 加载和渲染

  减小网页字体大小

 

其他细节:

 

a)     去抖动输入处理程序(scroll、touch) 

 

b) Web Woker 处理耗时任务

 

c)     减少样式计算的范围和复杂性、避免强制同步布局和布局抖动

 

 

 

避免强制同步布局:(强制浏览器在传输到显示器的过程中先执行布局,导致在渲染过程中重复步骤。)

 

 

 

布局抖动:(一个使浏览器进入读 - 写 - 读 - 写循环周期,迫使浏览器一遍又一遍的重新计算布局。)

 

 

 

d)尽量使用合成属性, 精准、GPU上合成图像(transform、opacity) ,用willchange / transform 提升图层

 

 

 

FCP:首次内容绘制 (FCP) 指标测量页面从开始加载到页面内容的任何部分在屏幕上完成渲染的时间。

 

A、 消除渲染阻塞资源 (识别关键CSS 内联到HTML中,异步加载非关键CSS)

 

B、 缩小CSS

 

C、 字体加载期间避免不可见文本

 

D、 采用高效的缓存策略

 

E、 避免DOM规模过大 (总共超过1500个节点,具有大于32个节点的深度,有超过60个子节点的父节点)

 

F:避免链接关键请求 (延迟加载处理)

 

 

TTI: ( <5s,TBT是TTI一个量化指标,阻塞时间越短,TTI 越小)

TTI计算方法:

1、先进行First Contentful Paint 首次内容绘制 (FCP)。

2、沿时间轴正向搜索时长至少为 5 秒的安静窗口,其中,安静窗口的定义为:没有长任务且不超过两个正在处理的网络 GET 请求。

3、沿时间轴反向搜索安静窗口之前的最后一个长任务,如果没有找到长任务,则在 FCP 步骤停止执行。

4、TTI 是安静窗口之前最后一个长任务的结束时间(如果没有找到长任务,则与 FCP 值相同)。

 

 

 

LCP:

 

 

哪些元素会在考量范围内:

 

Img元素

内嵌在SVG里面的Image元素

Video元素

块元素

 

最大内容区报告规则:

 

元素完成渲染并且对用户可见后的最大内容元素,但一旦更大的元素完成渲染,就会通过另一个PerformanceEntry对象进行报告。

 

 

 

图一:是随着新内容DOM的添加,导致最大内容区的改变

图二:最大内容区从可视区被移除

 

 

CLS: 只要可视区域中可见元素的起始位置(例如,元素在默认书写模式下的顶部和左侧位置)在两帧之间发生了变更,该 API 就会报告layout-shift条目。这样的元素被视为不稳定元素。

 

 

 

造成CLS偏高的原因:

 

1、无尺寸的图像,设置好width,height属性,浏览器会自动计算宽高比

2、无尺寸的广告、嵌入和 iframe,需要预留广告位

3、动态注入的内容 (留出预留空间)

4、导致不可见文本闪烁 (FOIT)/无样式文本闪烁 (FOUT) 的网络字体

 



推荐阅读
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 本文介绍了2015年九月八日的js学习总结及相关知识点,包括参考书《javaScript Dom编程的艺术》、js简史、Dom、DHTML、解释型程序设计和编译型程序设计等内容。同时还提到了最佳实践是将标签放到HTML文档的最后,并且对语句和注释的使用进行了说明。 ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
  • 本文讨论了在dva中引入antd组件table时没有显示样式的问题。提供了.roadhogrc文件的配置,包括环境和import的设置。同时介绍了extraBabelPlugins和transform-runtime的使用方法,并解释了libraryName和css的含义。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 第8章 使用外部和内部链接
    8.1使用web地址LearnAboutafricanelephants. ... [详细]
author-avatar
詹建红_335
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有