查看原文
其他

性能优化篇 - Performance(工具 & api)

前端小贾 前端学苑 2021-07-15
关注“前端学苑” ,坚持每天进步一点点


「~Performance性能优化 ~」

Performance 一个在前端开发领域中,无法被忽视的存在,如果我们的开发是一个满足需求就可以的产品,那么可能就用不到它;但是如果我们想对我们的这个产品,做一个极致的优化,那么 Performance 是一个很好的选择,也是一个不容忽视的选择。

简短的概括:

1、Performance 工具使用

2、浏览器渲染过程

3、Performance API


正文从这里开始~~~


一、Performance 工具

performance 的前世就是之前的 timeline(好吧,我错过了这个时代) 如果你真的找不到的话,可以检查下浏览器的版本,说不定是版本的问题,我的是最新的,所以肯定没有问题。

Chrome 57 之前叫作「Timeline」,而现在换了个更长的马甲 —— 「Performance」

1、在 Chrome 中,我们打开 Chrome 调试面板,进入 performance 界面。


第二步:screenshots 是对你的屏幕进行截图,后面会生成相关的比较直观的截图。

第四步:模拟 CPU 速度,更加方便你重现问题,如果 4x slowdown 不行,你可以选择 6x slowdown。


2、我们可以看到左上侧的位置有几个重要按钮,其作用如下:

3、完成之后就会出现以下的界面,这里都是我们应该重点关注的内容。

先来看看有哪些部分:

第一部分:controls,上面已介绍

第二部分:重要参数,这一部分我们称之为 Overview 窗格,我们可以看到 FPS, CPU, NET在页面加载时候的变化。

1)FPS:每秒帧数,绿色竖线越高, FPS 越高,我们应该关注红色部分,这说明我们的页面很可能出现卡顿现象,另外 60 是一个比较理想的值。

2)CPU: CPU 资源。

3)NET: 每条彩色横杆代表一种资源,横杆越长,检索资源所需要的越长。

第三部分:火焰图

1)横轴表示加载的时间。

2)纵轴表示事件(线程)的执行顺序,先是上面的执行再到下面的,我们要特别注意红色的三角部分。

第四部分:Summary 部分,可以看到 CPU 中中的资源分配,比如下图中的 Rendering(渲染)占比就很大。


3、使用小提示:第二、三、四部分都是联动的,比如你选择火焰图中的某个部分,下面的 Summary 就会显示这个部分的总结

4、使用 Performance 定位性能问题

上面简单介绍了一下 Performance,在我们得到数据之后,怎么分析?

具体的步骤如下:


二、浏览器渲染过程

知晓浏览器的渲染过程对我们理解分析十分重要,这里简要介绍一下浏览器渲染的过程:

当渲染首屏时浏览器分别解析 HTML 与 CSS 文件,生成文档对象模型(DOM)与 CSS 对象模型(CSSOM);合并 DOM 与 CSSOM 成为渲染树(Render Tree);计算样式( Style);计算每个节点在屏幕中的精确位置与大小(Layout);将渲染树按照上一步计算出的位置绘制到图层上(Paint);渲染引擎合成所有图层最终人眼可见(Composite Layers)。


三、Performance API

performance 是前端性能监控的API可以检测到网页渲染白屏时间、首屏时间、用户可操作的各时间节点,页面总下载的时间、DNS查询的时间、TCP链接的时间等等等。

帮你做更精准的埋点测试,监控前端网页的性能问题。

MDN文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Performance

1)常用的API 方法

1. performance.now()方法

performance.now()返回performance.navigationStart至当前的毫秒数。performance.navigationStart是下文将介绍到的可以说是浏览器访问最初的时间测量点。

值得注意的两点:

  • 测量初始点是浏览器访问最初测量点,或者理解为在地址栏输入URL后按回车的那一瞬间。

  • 返回值是毫秒数,但带有精准的多位小数。

用performance.now()检测for循环的执行时间(毫秒)

var st = performance.now(); for (var o = 0; o < 10000; o ++) console.log(o) var end = performance.now();

console.log(`for时间${end - st}`); // for时间1155.9950000373647

2. performance.navigation属性

performance.navigation负责纪录用户行为信息,只有两个属性。

console.log(performance.navigation);// PerformanceNavigation {type: 1, redirectCount: 0}

1)type:表示网页的加载来源,可能有4种情况

    0:网页通过点击链接、地址栏输入、表单提交、脚本操作等方式加载,相当于常数
    1:网页通过“重新加载”按钮或者location.reload()方法加载
    2:网页通过“前进”或“后退”按钮加载
    255:任何其他来源的加载
2)redirectCount:表示当前网页经过了多少次重定向跳转。


3、performance.getEntries()

包含了所有静态资源的数组列表

获取一组当前页面已经加载的资源PerformanceEntry对象。接收一个可选的参数options进行过滤,options支持的属性有name,entryType,initiatorType。


4、performance.mark()

自定义添加标记的时间, 方便我们计算程序的运行耗时。


5、performance.getEntriesByType()

PerformanceEntry 对象的列表,基于给定的 entry type


6、performance.clearMeasures()

从浏览器的性能输入缓冲区中移除自定义添加的 measure


7、performance.getEntriesByName()

PerformanceEntry 对象的列表,基于给定的 name 和 entry type。


8、performance.toJSON()

JSON 格式转化器,返回 Performance 对象的 JSON 对象。


2、计算公式

1)重定向耗时 :

redirectEnd - redirectStart


2)DNS查询耗时:

domainLookupEnd - domainLookupStart


3)TCP链接耗时:

connectEnd - connectStart


4)HTTP请求耗时:

responseEnd - responseStart


5)解析dom树耗时:

domComplete - domInteractive


6)白屏时间:

responseStart - navigationStart


7)DOMready时间:

domContentLoadedEventEnd - navigationStart


8)onload时间:

loadEventEnd - navigationStart


推荐热门技术文章:

1、一篇文章,教你学会Git

2、初探 Electron 桌面应用 - 理论篇

3、解锁 Webpack,看这篇就够了

4、干货:前端开发常见规范

5、这一次,彻底弄懂 Promise

6、关于移动端适配,你必须要知道的

7、你还是只会 npm install 吗?

8、让程序员变懒的 “vue-admin-template” 后台管理系统

9、这样配置,让你的VS Code好用到飞起!

10、前端性能优化实战

觉得本文对你有帮助?请分享给更多人

关注「前端学苑」加星标,提升前端技能

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存