热门标签 | 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指标。

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

推荐阅读
  • 电信网为不能访问联通服务器的网站_老板说网站慢,我们总结了三大阶段提升性能...
    作者:李平来源:https:www.cnblogs.comleefreemanp3998757.html前言在前一篇随笔《大型网站系统架构的演化》中&# ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 校内无法访问IEEE等部分数据库的解决方案
    解决了校内无法访问IE ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • android 触屏处理流程,android触摸事件处理流程 ? FOOKWOOD「建议收藏」
    android触屏处理流程,android触摸事件处理流程?FOOKWOOD「建议收藏」最近在工作中,经常需要处理触摸事件,但是有时候会出现一些奇怪的bug,比如有时候会检测不到A ... [详细]
  • 小白的Python 学习笔记(八)推导式详解
    大家好,今天我总结一下Python的推导式,首先让我们来看定义推导式(comprehensions)是Python的一种独有特性,是可以从一个数据序列构建另一个新的数据序列的结构体 ... [详细]
  • 结合“性能监视器”排查、处理性能瓶颈导致应用吞吐率等指标上不去的问题
    双11备战前夕,总绕不过性能压测环节,TPS一直上不去不达标,除了代码上的问题外,服务器环境、配置、网络、磁盘、CPU亦是导致性能瓶颈的重要一环,本文旨在分享最近项目性能 ... [详细]
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社区 版权所有