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

性能优化内容学习

写在前面

​ 性能优化的相关文章层出不穷,但是大部分都是在讲如何优化性能,也就是讲方法。但是在实际工作中,如何量化性能优化也是相当重要的一环。本文主要介绍谷歌提倡的起个用户体验指标(也可以认为是性能指标),每个指标分别根据以下几点讲解:

​ 1.指标本身的作用、测量、推荐时间区间等;

​ 2.如何根据指标进行优化;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o1RS9d4g-1603938129020)(file:///Users/marie/Documents/%E8%B0%B7%E6%AD%8C%E6%80%A7%E8%83%BD%E6%8C%87%E6%A0%87%E7%9A%84%E5%89%AF%E6%9C%AC)]

一、指标介绍

1.FP (first Paint) 首次绘制,这个指标用于记录页面第一次绘制像素的时间。

2.FCP(first Contentful Paint)首次内容绘制,这个指标用于记录页面首次绘制文本。图标。非空白Canvac活SVG的时间。

这两个指标看起来大同小异,但是FP发生的时间一定小于FCP。

FP指的是绘制像素,比如说页面的背景色是灰色的,那么在显示灰色背景时就记录下了FP指标。但是此时DOM 内容还没开始绘制,可能需要文件下载、解析等过程,只有当DOM内容发生变化才会触发,比如说渲染出了一段文字,此时就会记录下FCP指标。因此说我们可以把这两个指标认为是和白屏时间相关的指标,所以肯定是越快越好。

性能优化内容学习

上图是官方推荐的时间区间,也就是说如果我们的FC和FCP两个指标在两秒内完成 的话我们的页面就算体验优秀了。

3.LCP(largest Contentful Paint)最大内容绘制,用于记录视窗内最大的元素绘制的时间,该时间会随着页面渲染变化而变化,因为页面中的最大元素在渲染过程中可能会发生改变,另外该指标会在用户第一次交互后停止记录。指标变化如下图:性能优化内容学习

LCP其实比前两个指标更能体现一个页面的性能好坏程度,因为这个指标会持续更新。举个栗子????:当页面出现骨架屏或者Loading动画是FCP其实已经被记录下来了,但是此时用户希望看到的内容其实并未呈现,我们更想知道的是页面主要的内容是何时呈现出来的。

性能优化内容学习

上图是官方推荐的时间区间,在2.5秒内表示体验优秀。

4.TTI(Time to Interactive)首次可交互时间,这个指标的计算过程十分复杂,需要满足以下几个条件:

​ a.从FCP指标后开始计算;

​ b.持续5秒内无长任务(执行时间超过50ms)且无两个以上正 在进行中的GET请求

​ c.往前回溯至5秒前最后一个长任务结束的时间

性能优化内容学习

这里解释一下为什么长任务定义为50ms以外

Google提出了一个RAIL模型:

性能优化内容学习

对于用户交互(比如点击事件),推荐的响应时间是100ms以内。那么为了达成这个目标,推荐在空闲时间里执行任务不超过50ms(W3C也有这样的标准规定),这样能在用户无感知的情况下响应用户的交互,否则就会造成延迟感。

因此TTI是一个很重要的用户体验指标,代表着页面何时真正进入可用的状态。毕竟光内容渲染的快也不够,还要能迅速响应用户的交互。

5.FID(First Input Delay)首次输入延迟,记录在FCP和TTI之间用户首次与页面交互时响应的延迟。

这个指标其实很好理解,就是用户交互时间触犯到页面响应中间耗时多少,如果其中有长任务发生的话那么势必会造成响应时间边长。

其实在上面我们已经说过Google推荐响应用户交互在100ms以内:

性能优化内容学习

6.TBT(Total Blocking Time)阻塞总时间,记录在FCP到TTI之间所有长任务的阻塞时间总和。

假如说在FCP到TTI之间页面总共执行了一下长任务(执行时间大于50ms)及短任务(执行时间低于50ms)

那么计算时就是将每个长任务的执行总时间减去50ms再与其他短任务时长求和。

这个指标的高低其实也影响了TTI的高低,或者说和长任务相关的几个指标都有关联性。

7.CLS (Cumulative Layout Shift)累计位移偏移,记录了页面上非预期的位移波动。

大家应该遇到过这种情况:页面渲染过程中突然插入一张巨大的图片或者说点击了某个按钮突然动态插入了一块内容等等相当影响用户体验的网站。这个指标就是为这种情况而生的,计算方式为:位移英下乡的面积*位移距离。

性能优化内容学习

以上图为例,文本移动了25%的屏幕高度距离(位移距离),位移前后影响了75%的屏幕高度面积(位移影响的面积),那么CLS为0.25 * 0.75 = 0.1875。

性能优化内容学习

CLS推荐值低于0.1,越低说明页面跳来跳去的情况越少,用户体验越好。毕竟很少有人喜欢阅读或者交互过偶成中网页突然动态插入DOM的情况,比如说插入广告~~

三、三大核心指标

Google在今年五月提出了网站用户体验的三大核心指标,分别为:

LCP

FID

CLS

LCP代表了页面的速度指标,虽然还存在其他的一些提现速度的指标,但是上文也说过 LCP能提现的东西更多一些。一时指标实时更新,数据更精确,二是代表着页面最大元素的渲染时间,通常来说页面中最大元素的快速载入能让用户有一个良好的用户体验。

FID代表了页面的交互体验指标,毕竟没有一个用户希望出发交互以后页面的反馈很迟缓,交互响应的速度快能给用户一个流畅的网页。

CLS代表了页面的稳定指标,尤其在手机上这个指标更为重要。因为手机屏幕小,CLS值大的话会让用户觉得页面体验做的很差。

四、如何获取指标

Chrome DevTools

web-vitals 库

web-vitals-extension

Lighthouse

五、如何优化指标

1.资源优化

该项措施可以帮助我们优化FP、FCP、LCP指标。

  • 压缩文件、使用Tree-shaking删除无用代码
  • 服务端配置Gzip进一步在压缩文件体积
  • 资源按需加载
  • 通过Chrome DevTools分析首屏不需要使用的CSS文件, 以此来精简Css
  • 内联关键的CSS代码
  • 使用CDN加载资源及dns-prefetch与解析DNS的IP地址
  • 对资源使用preconnect,以便预先进行IP解析、TCP握手、TLS握手
  • 缓存文件、对首屏数据做离线缓存
  • 图片优化,包括:用CSS代替蹄片、裁剪适配屏幕的图片大小、小图使用base64或者PNG格式、支持WebP就尽量使用WebP、渐进式加载图片

2.网络优化

​ 该项措施可以帮助我们优化FP、FCP、LCP指标。

这块内容主要在服务器端配置,升级至最新的网络协议通产功能让网站加载的更快。比如说使用HTTP2.0协议、TLS1.3协议或者直接拥抱QUIC协议~

3.优化耗时任务

​ 该项措施可以帮助饿哦们优化TTI 、FID、TBT指标。

  • 使用web Worker 将耗时任务丢到子线程中,这样能让主线程在不卡顿的情况下处理JS任务
  • 调度任务+时间切片,这块技术在React 16中有使用到。简单来说就是给不同的任务分配优先级,然后将一段长任务切片,这样能尽量保证任务只在浏览器的空闲时间中执行而不卡顿主线程。

4.不要动态插入内容

​ 该项措施可以帮助我们优化CLS指标。

  • 使用骨架屏给用户一个预期的内容框架,突兀的显示内容体验不会很好
  • 图片切勿不设置长款,二十使用展位图给用户一个图片位置的语气
  • 不要再现有的内容中间插入内容,起码给出一个预留位置

推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 深入解析HTML5字符集属性:charset与defaultCharset
    本文将详细介绍HTML5中新增的字符集属性charset和defaultCharset,帮助开发者更好地理解和应用这些属性,以确保网页在不同环境下的正确显示。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
  • C++ 开发实战:实用技巧与经验分享
    C++ 开发实战:实用技巧与经验分享 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本教程详细介绍了如何使用 Spring Boot 创建一个简单的 Hello World 应用程序。适合初学者快速上手。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文将详细介绍如何在Webpack项目中安装和使用ECharts,包括全量引入和按需引入的方法,并提供一个柱状图的示例。 ... [详细]
  • Webdriver中元素定位的多种技术与策略
    在Webdriver中,元素定位是自动化测试的关键环节。本文详细介绍了8种常用的元素定位技术与策略,包括ID、名称、标签名、类名、链接文本、部分链接文本、XPath和CSS选择器。每种方法都有其独特的优势和适用场景,通过合理选择和组合使用,可以显著提高测试脚本的稳定性和效率。此外,文章还探讨了在复杂页面结构中如何灵活运用这些定位技术,以应对各种挑战。 ... [详细]
author-avatar
敬昇文军3546
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有