Navigation Timing获取页面加载各个阶段所需时间

2017-07-16  本文已影响0人  3fuyu

原文链接

起因

最近接触到了一个性能优化方面为我们提供精准数据的工具,Navigation Timing,本想从网上获取他更详细的信息,但搜索到的内容绝大部分都是国外的文章,遂决定写一遍具体分析的文章。

之前测试页面加载的时间都是在相应的位置打Date.now(),通过计算时间差来实现。这样的做法有很多弊端。

W3C Web Performance Working Group 引入了 Navigation Timing API 帮我们自动,精准的实现了性能测试的打点问题。

Navigation Timing API 用法

用法很简单,在页面load完之后我们可以从performance.timing对象中拿到我们需要的所有数据。见下图:

Navigation Timing不仅帮我们省去了繁琐的手动打点的操作,而且提供了以前我们无法获取到的数据,比如DNS和TCP连接所需的时间。

里面提供的具体事件如下图:

参数说明

具体文字说明:

注,从domLoading开始往下的参数chrome官网并未给出具体英文解释,只是猜测,如有错误,欢迎纠正。
附上官方链接

简单用法

这些参数已经非常详细,也很精准,稍作处理就可以得出我们需要的一些关键数字,如:

demo如下:

let timing = performance.timing,
    start = timing.navigationStart,
    dnsTime = 0,
    tcpTime = 0,
    firstPaintTime = 0,
    domRenderTime = 0,
    loadTime = 0;

dnsTime = timing.domainLookupEnd - timing.domainLookupStart;
tcpTime = timing.connectEnd - timing.connectStart;
firstPaintTime = timing.responseStart - start;
domRenderTime = timing.domContentLoadedEventEnd - start;
loadTime = timing.loadEventEnd - start;

console.log('DNS解析时间:', dnsTime , '\nTCP建立时间:', tcpTime, '\n首屏时间:', firstPaintTime,
 '\ndom渲染完成时间:', domRenderTime, '\n页面onload时间:', loadTime);

效果如下:

兼容性

目前Navigation Timing已经普及,绝大部分主流浏览器都已经支持

那么,开始优化你的app吧


3Fuyu

上一篇 下一篇

猜你喜欢

热点阅读