前端性能优化的指标和工具

news/2024/11/26 10:29:09/

目录

一:性能指标和优化目标

1.1.网络加载性能

1.2.用户交互体验

二:RAIL测量模型

2.1.Response(响应): 处理事件应在在50ms内完成

2.2.Animation(动画): 每10ms产生一帧

2.3.Idle(空闲): 尽可能增加空闲时间

2.4.Load(加载):在5s内完成内容加载并可以交互

2.5.RAIL性能测量工具

三:常用性能测量 APIs


一:性能指标和优化目标

1.1.网络加载性能

通过开发者工具中的Network选项卡最底部可以看总体情况

两根线 蓝线:DOM加载完成时间  红线:总资源加载完成时间

最后一栏属性Waterfall(瀑布图):直观显示网站资源加载(横向、纵向看),可以鼠标光标悬浮上面查看 优化小点(资源并行加载)

重要参数 Waiting(TTFB)表示资源发出到请求结束真正需要的总时间(能给用户最直观感受)

保存分析network信息:鼠标右键点击空白处 save all as HAR with content

 Lighthouse选项卡(性能测量工具)满分100分 多测试几次取平均

黄色warning 红色问题比较大  绿色非常好

两个最重要指标:1.First Contentful Paint(第一个内容(文本、图片)出现的时间)

2. Speed Index(速度指数)不需要知道如何计算 标准4秒

1.2.用户交互体验

1.交互响应要做到足够快 

2.浏览画面要足够的流畅

打开开发者工具 使用快捷键 Ctrl+Shift+P 输入frame

点击最后一项 可以查看当前页面的帧数

 3.希望所有的异步请求要足够快(1秒之内把数据返回回来) 如果不行,做压缩,还是不行,先考虑前端交互上的优化(比如加一个loading动画)

二:RAIL测量模型

RAIL是谷歌提出的一个可以量化的标准,让用户的体验成为性能优化的目标

是 Response(响应), Animation(动画), Idle(空闲), 和 Load(加载)的首字母缩写 

2.1.Response(响应): 处理事件应在在50ms内完成

为了确保在 100 毫秒内产生可见响应,需要在 50 毫秒内处理用户输入事件。因为除输入处理外,通常还有需要执行其他工作,而且这些工作会占用可接受输入响应的部分可用时间

2.2.Animation(动画): 每10ms产生一帧

为了保证动画能达到1s60帧,每一帧的时间在16ms左右,但浏览器需要用6ms来渲染每一帧

2.3.Idle(空闲): 尽可能增加空闲时间

利用空闲时间完成推迟的工作。例如,尽可能减少预加载数据,以便您的应用快速加载,并利用空闲时间加载剩余数据。

2.4.Load(加载):在5s内完成内容加载并可以交互

当页面加载缓慢时,用户注意力会分散,他们会认为任务已中断。

  • 根据用户的设备和网络能力优化相关的快速加载性能。目前,对于首次加载,在使用速度较慢 3G 连接的中端移动设备上,理想的目标是在5秒或更短的时间内实现可交互。

  • 对于后续加载,理想的目标是在 2 秒内加载页面。

2.5.RAIL性能测量工具

  • Chrome DevTools :开发调试、性能评测
  • Lighthouse:网站整体质量评估
  • WebPageTest:多测试地点、全面性能报告

关于WebPageTest等三者性能测量工具具体介绍,参考:

使用WebPageTest、Lighthouse和Chrome DevTools评估网站性能_不想学习的打工人的博客-CSDN博客

三:常用性能测量 APIs

性能测量工具都有一些关键的时间节点,比如:TTFB、首屏,这些时间节点是通过浏览器实现特定的API获取的,所以我们也可以通过API来直接获取这些数据

比如,我们想要获取Time to Interactive 可交互时间

// load事件后触发
window.addEventListener('load', e => {// Time to Interactive 可交互时间let timing = performance.getEntriesByType('navigation')[0]// 计算 tti = domInteractive - fetchStartlet tti = timing.domInteractive - timing.fetchStartconsole.log('TTI', tti)
})

下面是一些常用API的时间计算规则:

// DNS 解析耗时:
domainLookupEnd - domainLookupStart
// TCP 连接耗时:
connectEnd - connectStart
// SSL 安全连接耗时:
connectEnd - secureConnectionStart
// 网络请求耗时 (TTFB):
responseStart - requestStart
// 数据传输耗时:
responseEnd - responseStart
// DOM 解析耗时:
domInteractive - responseEnd
// 资源加载耗时:
loadEventStart - domContentLoadedEventEnd
// First Byte时间:
responseStart - domainLookupStart
// 白屏时间:
responseEnd - fetchStart
// 首次可交互时间:
domInteractive - fetchStart
// DOM Ready 时间:
domContentLoadEventEnd - fetchStart
// 页面完全加载时间:
loadEventStart - fetchStart
// http 头部大小:
transferSize - encodedBodySize
// 重定向次数:
performance.navigation.redirectCount
// 重定向耗时:
redirectEnd - redirectStart

我们也可以通过 performance 实时监测对象

// 通过PerformanceObserver得到所有long tasks对象
let observer = new PerformanceObserver(list => {for (const entry of list.getEntries()) {console.log(entry)}
})
observer.observe({ entryTypes: ['longtask'] })

假如你做的是视频网站,如果用户不再看你这个页面了,这时候需要考虑节流,不再进行视频内容的加载(可以在页面上进行 Tab 切换测试)

let vEvent = 'visibilitychange'
if (document.webkitHidden !== undefined) {vEvent = 'webkitvisibilitychange'
}
function visibilityChange() {if (document.hidden || document.webkitHidden) {document.title = 'Web page is hidden'} else {document.title = 'Web page is visible'}
}
document.addEventListener(vEvent, visibilityChange, false)

如果知道用户当前网络状态,就可以有针对性资源加载。比如用户网络状态不好时使用稍微模糊的图片(去 Network 去控制网络吞吐进行测试)

let connection = navigator.connection || navigator.mozConnection
let type = connection.effectiveType
function updateConnectionStatus() {console.log('connection type changed from' + type + 'to ' + connection.effectiveType)
}
connection.addEventListener('change', updateConnectionStatus)


http://www.ppmy.cn/news/287789.html

相关文章

前端性能优化-CSS的性能优化:--transform与position的区别、硬件加速工作原理及注意事项

上个星期去baidu二面面试,第一题就有问到这样问题: transform与position:absolute 有什么区别? 回家后查资料发现这道题目其实不简单啊,涉及到重排、重绘、硬件加速等网页优化的知识。 ⼀、问题背景 过去⼏年,我们常常会听说硬件…

性能优化:纹理文件

纹理:是图像文件、一个颜色数据的大列表,以告知插值程序,图像的每个像素应该是什么颜色。 精灵:是网格的2D等价物,通常是一个四边形,用于渲染面向当前相机的平面。 网格和精灵都使用纹理,将图像…

基于飞桨PaddleClas实现轧钢带表面缺陷分类,top1准确率可达100%

点击左上方蓝字关注我们 【飞桨开发者说】路星奎,沈阳化工大学信息工程学院研究生在读,计算机视觉技术爱好者,研究方向为图像分类、目标检测、图像分割等 2019年7月的飞桨活动中,第一次接触飞桨开源深度学习框架,这也是…

前端页面性能优化指标

前端页面性能优化指标 一、有哪些指标LCP(Largest Contentful Paint)FID( First Input Delay)CLS(Cumulative Layout Shift)INP(Interaction to Next Paint)其他类指标二、如何度量计…

基于改进FCOS的钢带表面缺陷检测算法

本文转载自人工智能技术与咨询、新机器视觉 摘要 针对现有钢带表面缺陷检测所存在的检测效率低、适用范围有限等缺陷,提出一种基于改进FCOS的钢带表面缺陷检测算法。该算法使用含形变卷积的卷积神经网络提取缺陷特征,使用关键点特征融合增强检测模型输入…

性能优化——图片压缩、加载和格式选择

前言 在我经历的多个电商与大屏项目的优化性能的项目后,我发现图片资源的处理在网站性能优化中有着举足轻重的作用。 一般电商网站请求数据 在首屏加载的 145 个请求中图片资源请求占到了 75% 以上,在所有请求静态资源中图片也占有着很大的比重。可见图…

工艺篇:常用表面处理

工艺篇:常用表面处理 表面处理定义 表面处理是在基体材料表面上人工形成一层与基体的机械、物理和化学性能不同的表层的工艺方法。表面处理的目的是满足产品的耐蚀性、耐磨性、装饰或其他特种功能要求,表面处理按照机理来分可以分为以下4部分&#xff…

GO-Surf: 用于快速、高保真RGB-D表面重建的神经特征网格优化

标题: GO-Surf: Neural Feature Grid Optimization for Fast, High-Fidelity RGB-D Surface Reconstruction 作者: Jingwen Wang, Tymoteusz Bleja, Lourdes Agapito 单位:伦敦大学 来源:3DV2022 编译:张海晗 审核: zhh 点击进入—>3D视…