前端性能分析-Performance

使用Chrome DevTools的Performance面板和代码中window.performance分析页面的性能。

Chrome DevTools的Performance

 

  1. 无痕模式

  

  无痕模式可以保证Chrome在一个相对干净的环境下运行。比如安装了许多Chrome插件,这些插件可能影响我们分析性能的数据。

  使用快捷键Control+Shift+N可以打开无痕模式。

 

  2. 打开浏览器开发模式,Mac下使用Command+Option+I或者Windows使用Control+shift+I;

 

  3. 点击DEMO来帮我我们分析。调到手机模式下

  

  页面按钮功能:Add 10-增加10个移动的点、 Subtract 10-减少10个点(到10个就不能在减少了)、 stop-停止运行、 Optimize-优化模式、Help-跳转帮助页。

 

  4. 设置网络和CPU,可以设置Network设置网络信号类型,设置CPU可以模拟移动端性能。(速度越慢约能清楚的看到需要优化的点)。

  

 

 

  5. 开始测试

  1. 点击add 10大约20次,可以看到点运动已经明显卡顿。

  

  点击开始性能检测收集,出现收集性能弹窗。

  

  点击stop完成性能收集

  

  2. 颜色块的表示:

  (1)蓝色为HTML文件

  (2)黄色为脚本

  (3)紫色为样式

  (4)绿色为媒体文件

  (5)灰色为其他资源

  3. OverView三个图标

  (1)FPS,每秒帧数,绿色竖线越高,FPS越高。FPS图表上的红色块表示长时间帧,很可能出现卡顿。当帧数超过60就会出现卡顿的现象。

  (2)CPU,CPU资源,其面积代表消耗CPU资源的事件。

  (3)NET,每条彩色横杠代表一种资源,横杠越长需要时间越长,每个横杠浅色部分代表等待时间。

  可以放大显示一部分记录,以便简化分析。

  选中一部分后,可以使用w、s、a、d代表放大、缩小、前进、后退。

  4. 火焰图表示

  

  火焰图是CPU处理事件消耗的时间,由此可以找到瓶颈的大概方向。

  5. 存在问题报告

  

  在帧率卡顿的情况下,可以看到主进程的问题(事件长条出现红色小三角),这说明事件存在问题,需要特别注意。

  双击这个红色小三角,在Summary面板会看到详细信息,点击app.js71就会调转到对应的代码处。

  6. 显示实时FPS面板

  (1)Mac下使用Command+Shift+P或者Windows下使用Control+Shift+P打开命令菜单。

  (2)输入Rendering,选择Show Rendering。

  (3 在Rendering面板里,激活FPS Meter。FPS实时面板就出现在页面的右上角。

  

  这样就可以实时观测观测一些性能信息了。

 

window.performance

  performance是W3C基于前端对性能的需求下推出的一套性能API标准。

 

  timing(performance.timing)

   

  用户输入URL到用户使用页面全过程时间统计,会返回一个PerformanceTiming对象,单位为毫秒

  1. 几个关键的点:

  (1)fetchStart:发起获取当前文档的时间,我理解是浏览器收到页面发起请求的时间点。

  (2)domainLookupStart:返回浏览器开始DNS查询的时间,如果此请求没有DNS查询过程,如长连接,资源Cache,或是本地资源,那么就返回fetchStart的值。

  (3)domainLookupEnd: 返回浏览器结束DNS查询的时间,如果没有DNS查询同上。

  (4)ConnectStart: 浏览器向服务器请求文档,开始建立连接的时间,如果此连接是一个长连接或者无需和服务器连接(使用缓存),则返回domainLookupEnd的值。

  (5)ConnectEnd:浏览器向服务器请求文档,建立连接成功的时间。

  (6)requestStart:开始请求文档时间(注意没有requestEnd)

  (7)responseStart:浏览器开始接收第一个字节的时间,数据来自于服务器,缓存或本地。

  (8)unloadEventStart:卸载一个文档开始的时间。

  (9)unloadEventEnd:卸载一个文档结束的时间。

  (10)domLoading:浏览器把domcument.readyState设置为“loading”的时间点,开始构建DOM书的时间点。

  (11)responseEnd:浏览器接收最后一个字节数据的时间,连接被关闭的时间。

  (12)domInterActive:浏览器把domcument.readyState设置为“interactive”的时间点,DOM树创建结束。

  (13)domContentLoadedEventStart:文档发生DomContentLoaded的事件时间。

  (14)domContentLoadedEventEnd:文档的DOMContentLoaded事件结束的时间。

  (15)domComplete:浏览器把document.readyState设置为“complate”的时间点。

  (16)loadEventStart:文档触发load事件的时间。

  (17)loadEventEnd:文档触发load事件结束后的时间。

  2. 常用的一些值

  (1)准备新页面耗时:fetchStart-navigationStart

  (2)重定向时间:redirectEnd-redirctStart

  (3)App Cache时间:domainLookupStart-fetchStart

  (4)DNS解析时间:domainLookupEnd-domainLookupStart

  (5)TCP连接时间:connectEnd-connectStart

  (6)request时间:responseEnd-requestStart 请求开始到响应结束

  (7)请求完毕到DOM树加载:domInterActive-responseEnd

  (8)构建与解析DOM树,加载资源时间:domComplete-domInteractive

  (9)load时间:loadEventEnd-loadEventStart

  (10)整个页面的加载时间:loadEventEnd-NavigationStart

  (11)白屏时间:responseStart-navigationStart

 

  performance.getEnteres()

  这个API能帮我们获得资源的请求时间,报错JS、CSS、图片等

  

  包含的信息:

  (1)entryType:类型为resource

  (2)name:资源的url

  (3)initiatorType:资源的link

    (4)资源时间 :duration的值,是responseEnd-startTime

 

  performance.memory

  这个API主要是浏览器内存情况

  

  包含的信息:

  (1)jsHeapSizeLomit:内存大小限制

  (2)totalJSHeadSize:可使用的内容

  (3)userdJSHeadSize:已使用的内容

posted on 2018-12-10 15:13  yaobai  阅读(3126)  评论(0编辑  收藏  举报

导航