文章插图

文章插图
不同阶段之间是连续的吗? —— 不连续
每个阶段都一定会发生吗?—— 不一定
重定向次数:performance.navigation.redirectCount
重定向耗时: redirectEnd - redirectStart
DNS 解析耗时: domainLookupEnd - domainLookupStart
TCP 连接耗时: connectEnd - connectStart
SSL 安全连接耗时: connectEnd - secureConnectionStart
网络请求耗时 (TTFB): responseStart - requestStart
数据传输耗时: responseEnd - responseStart
DOM 解析耗时: domInteractive - responseEnd
资源加载耗时: loadEventStart - domContentLoadedEventEnd
首包时间: responseStart - domainLookupStart
白屏时间: responseEnd - fetchStart
首次可交互时间: domInteractive - fetchStart
DOM Ready 时间: domContentLoadEventEnd - fetchStart
页面完全加载时间: loadEventStart - fetchStart
http 头部大小: transferSize - encodedBodySize
3. Resource Timing APIhttps://w3c.github.io/resource-timing/
performance.getEntriesByType("resource");

文章插图

文章插图
// 某类资源的加载时间,可测量图片、js、css、XHRresourceListEntries.forEach(resource => {if (resource.initiatorType == 'img') {console.info(`Time taken to load ${resource.name}: `, resource.responseEnd - resource.startTime);}});这个数据和 chrome 调式工具里 network 的瀑布图数据是一样的 。4. paint Timing APIhttps://w3c.github.io/paint-timing/
首屏渲染时间、首次有内容渲染时间

文章插图
5. User Timing APIhttps://www.w3.org/TR/user-timing-2/#introduction
主要是利用 mark 和 measure 方法去打点计算某个阶段的耗时,例如某个函数的耗时等 。
6. High Resolution Time APIhttps://w3c.github.io/hr-time/#dom-performance-timeorigin
主要包括 now() 方法和 timeOrigin 属性 。
7. Performance Timeline APIhttps://www.w3.org/TR/performance-timeline-2/#introduction
总结基于 performance 我们可以测量如下几个方面:
mark、measure、navigation、resource、paint、frame 。
let p = window.performance.getEntries();
重定向次数:performance.navigation.redirectCount
JS 资源数量:p.filter(ele => ele.initiatorType === "script").length
CSS 资源数量:p.filter(ele => ele.initiatorType === "css").length
AJAX 请求数量:p.filter(ele => ele.initiatorType === "xmlhttprequest").length
IMG 资源数量:p.filter(ele => ele.initiatorType === "img").length
总资源数量: window.performance.getEntriesByType("resource").length
不重复的耗时时段区分:
重定向耗时: redirectEnd - redirectStart
DNS 解析耗时: domainLookupEnd - domainLookupStart
TCP 连接耗时: connectEnd - connectStart
SSL 安全连接耗时: connectEnd - secureConnectionStart
网络请求耗时 (TTFB): responseStart - requestStart
HTML 下载耗时:responseEnd - responseStart
DOM 解析耗时: domInteractive - responseEnd
资源加载耗时: loadEventStart - domContentLoadedEventEnd
其他组合分析:
白屏时间: domLoading - fetchStart
粗略首屏时间: loadEventEnd - fetchStart 或者 domInteractive - fetchStart
DOM Ready 时间: domContentLoadEventEnd - fetchStart
页面完全加载时间: loadEventStart - fetchStart
JS 总加载耗时:
const p = window.performance.getEntries();
let cssR = p.filter(ele => ele.initiatorType === "script");
Math.max(...cssR.map((ele) => ele.responseEnd)) - Math.min(...cssR.map((ele) => ele.startTime));
CSS 总加载耗时:
const p = window.performance.getEntries();let cssR = p.filter(ele => ele.initiatorType === "css");Math.max(...cssR.map((ele) => ele.responseEnd)) - Math.min(...cssR.map((ele) => ele.startTime));如何监控?了解了 performance 之后,我们来看看,具体是如何监控的?
文章插图
总体流程:性能指标收集与数据上报—数据存储—数据聚合—分析展示—告警、报表推送
本文主要讲述如何将性能数据进行上报 。
数据上报(性能指标收集)
注意项:1)保证数据的准确性 2)尽量不影响应用的性能
推荐阅读
- 黑客入门,MSF和Kali哪个更厉害?小白该如何选择?
- 外国人怎么用淘宝 如何开海外淘宝店
- 一般新开的淘宝店铺多久能开始出单 新开的网店如何才有订单
- 淘宝开店要实名认证吗 手机淘宝如何实名认证
- 看netstat命令,如何用于判断服务器是否遭受DDoS攻击?
- wordpress加速优化:WP Fastest Cache 插件如何设置使用
- 如何优化淘宝店铺宝贝的标题关键词? 淘宝运营关键词怎么修改
- 眼镜店背景墙翻新如何装修
- 小型眼镜店装修如何设计
- 小米|闲谈流传已久的“六君子”钓鱼药酒,到底怎么配置、效果如何?
