如何收集常见的前端性能信息

前端性能指标,大多有TTFB ,首屏,首次可交互时间等

相关的文章已经有很多,细节这里就不多说了,可参考文末资料

总体来说,需要知道浏览器(新的)给我们提供了 Performance API,使用这个属性,我们可以得到一系列跟性能相关的数据

结合各个时间点的意义,我们可以计算出关键的耗时指标

看看下面这张图

经过简单的计算,可以获取到这样的信息

与DevTools 的Network来比较,数据是差不多的,应该能作为参考

简单上报一下

那么,这些个指标是怎末计算的呢,且看代码部分,看看注释应该就知道了

如何计算这些时间点,因人而异,各人有不同的版本,只要觉得合理,其实都是可以的

  1 <script>
  2     ;(function(window, undefined) {
  3         function addEvent(type, fn) {
  4             if (window.addEventListener) {
  5                 window.addEventListener(type, fn, false);
  6             } else {
  7                 window.attachEvent(‘on‘ + type, fn);
  8             }
  9         }
 10
 11         // load 事件触发猴再收集相关数据
 12         addEvent(‘load‘, getTiming);
 13
 14         // 快捷入口
 15         window.getTiming = getTiming;
 16
 17         function getTiming() {
 18             // 浏览器支持的API
 19             var performance = window.performance;
 20
 21             if (!performance || !performance.timing) {
 22                 console.log(‘当前浏览器不支持Performance Time API‘);
 23                 return;
 24             }
 25
 26             var timing = performance.timing,
 27                 timings = {
 28                     page: [],
 29                     pageReport: []
 30                 };
 31
 32             // 设置某一项耗时统计
 33             function setPageTiming(name, text, time) {
 34                 timings.page.push({
 35                     name: name,
 36                     text: text,
 37                     time: time + ‘ ms‘
 38                 });
 39
 40                 timings.pageReport.push({
 41                     name: name,
 42                     time: time + ‘ ms‘
 43                 });
 44             }
 45
 46             // 页面加载仍未完成,loadEventEnd值可能为0,需要延迟处理
 47             if (timing.loadEventEnd - timing.navigationStart < 0) {
 48                 console.log(‘getTiming delay‘);
 49                 setTimeout(getTiming, 1000);
 50                 return;
 51             }
 52
 53             setPageTiming(‘redirect‘, ‘重定向‘, timing.redirectEnd - timing.redirectStart);
 54             setPageTiming(‘dns‘, ‘DNS解析‘, timing.domainLookupEnd - timing.domainLookupStart);
 55             setPageTiming(‘tcp‘, ‘TCP连接‘, timing.connectEnd - timing.connectStart);
 56             setPageTiming(‘ssl‘, ‘TCP-SSL连接‘, !timing.secureConnectionStart ? 0 : timing.connectEnd - timing.secureConnectionStart);
 57             setPageTiming(‘ttfb‘, ‘TTFB服务器返回首个字节‘, timing.responseStart - timing.requestStart);
 58             setPageTiming(‘download‘, ‘DOM资源下载‘, timing.responseEnd - timing.responseStart);
 59             setPageTiming(‘before-parse-html‘, ‘DOM解析前耗时‘, timing.responseEnd - timing.navigationStart);
 60             setPageTiming(‘html-parsed‘, ‘DOM解析完成‘, timing.domInteractive - timing.domLoading);
 61             setPageTiming(‘dom-loaded‘, ‘DOM加载完成‘, timing.domComplete - timing.domLoading);
 62             setPageTiming(‘dom-content-load‘, ‘DOMContentLoaded事件开始‘, timing.domContentLoadedEventStart - timing.navigationStart);
 63             setPageTiming(‘dom-content-loaded‘, ‘DOMContentLoaded事件结束‘, timing.domContentLoadedEventEnd - timing.navigationStart);
 64             setPageTiming(‘load‘, ‘Load事件开始‘, timing.loadEventStart - timing.navigationStart);
 65             setPageTiming(‘loaded‘, ‘Load事件结束‘, timing.loadEventEnd - timing.navigationStart);
 66
 67             // 以下两项可以直接获取
 68             var paintTiming = {
 69                 ‘first-paint‘: ‘首屏(首次绘制)‘,
 70                 ‘first-contentful-paint‘: ‘首屏(首次内容绘制)‘
 71             };
 72
 73             performance.getEntriesByType(‘paint‘).forEach(function(entry) {
 74                 if (paintTiming[entry.name]) {
 75                     setPageTiming(entry.name, paintTiming[entry.name], entry.startTime + entry.duration);
 76                 }
 77             });
 78
 79             // 以下两项指标与需求有关,需要根据业务要求在代码中打点统计
 80             // setPageTiming(‘first-meaningful-paint‘, ‘首屏(首次有效绘制)‘, timing.domInteractive - timing.navigationStart);
 81             // setPageTiming(‘time-to-interactive‘, ‘可交互时间‘, timing.domInteractive - timing.navigationStart);
 82
 83             // 简易版统计上报
 84             if (requestIdleCallback) {
 85                 requestIdleCallback(function() {
 86                     report(timings.pageReport);
 87                 });
 88             } else {
 89                 setTimeout(function() {
 90                     report(timings.pageReport);
 91                 });
 92             }
 93
 94             function report(data) {
 95                 data = data || [];
 96
 97                 if (!data.length) {
 98                     return;
 99                 }
100
101                 (new Image()).src = ‘https://a.b.c/d/e?t=‘ + (new Date())
102                     + ‘&l=‘ + location.href
103                     + ‘&p=‘ + navigator.platform
104                     + ‘&net=‘ + navigator.connection.effectiveType
105                     + ‘&u=‘ + navigator.userAgent
106                     + ‘&times=‘ + JSON.stringify(data);
107             }
108
109             console.table(timings.page);
110             console.log(performance.timing);
111         }
112     })(window);
113 </script>

参考资料:

以用户为中心的性能指标

2018你应该知道的前端性能信息采集指南

Speed Matters

前端性能监控

原文地址:https://www.cnblogs.com/imwtr/p/10119680.html

时间: 2024-07-31 09:26:26

如何收集常见的前端性能信息的相关文章

大话WEB前端性能优化基本套路

前言 前端性能优化这是一个老生常谈的话题,但是还是有很多人没有真正的重视起来,或者说还没有产生这种意识. 当用户打开页面,首屏加载速度越慢,流失用户的概率就越大,在体验产品的时候性能和交互对用户的影响是最直接的,推广拉新是一门艺术,用户的留存是一门技术,拉进来留住用户,产品体验很关键,这里我以美柚的页面为例子,用实例展开说明前端优化的基本套路(适合新手上车). WEB性能优化套路 基础套路1:减少资源体积 css 压缩 响应头GZIP js 压缩 响应头GZIP html 输出压缩 响应头GZI

WEB前端性能优化常见方法

web前端是应用服务器处理之前的部分,前端主要包括:HTML,CSS,javascript,image等各种资源,针对不同的资源有不同的优化方式. 1. 内容优化 (1)减少HTTP请求数:这条策略是最重要最有效的,因为一个完整的请求要经过DNS寻址,与服务器建立连接,发送数据,等待服务器响应,接收数据这样一个消耗时间成本和资源成本的复杂的过程. 常见方法:合并多个CSS文件和js文件,利用CSS Sprites整合图像,Inline Images(使用 data:URL scheme在实际的页

基于大数据的用户行为预测在前端性能优化上的应用

首先,我得说,这篇文章有点标题党了,其实内容并没有标题看起来那么高大上.其次,本文只是做一个技术方案可能性的探讨,并没有提供完善的解决方案,至多给了一个Demo供参考. 目的 如需转载,请注明转自:http://www.cnblogs.com/silenttiger/p/4929841.html 前端性能优化,我觉得最主要的目的就两个:1.提升页面加载速度:2.节约服务器资源. 这里特别提一下节约服务器资源,很多人在做前端性能优化的时候,往往只考虑前端性能的问题,而完全忽视前端的性能优化对后端服

前端性能

1.关键点 分页面.区域.浏览器.性能指标 页面的性能指标详解: 白屏时间(first Paint Time)--用户从打开页面开始到页面开始有东西呈现为止 首屏时间--用户浏览器首屏内所有内容都呈现出来所花费的时间 用户可操作时间(dom Interactive)--用户可以进行正常的点击.输入等操作,默认可以统计domready时间,因为通常会在这时候绑定事件操作 总下载时间--页面所有资源都加载完成并呈现出来所花的时间,即页面 onload 的时间 确定统计起点: 我们需要在用户输入 UR

前端性能监控

前端性能 1.关键点 分页面.区域.浏览器.性能指标 页面的性能指标详解: 白屏时间(first Paint Time)——用户从打开页面开始到页面开始有东西呈现为止 首屏时间——用户浏览器首屏内所有内容都呈现出来所花费的时间 用户可操作时间(dom Interactive)——用户可以进行正常的点击.输入等操作,默认可以统计domready时间,因为通常会在这时候绑定事件操作 总下载时间——页面所有资源都加载完成并呈现出来所花的时间,即页面 onload 的时间 确定统计起点: 我们需要在用户

性能测试(六)前端性能优化方法

日常工作和生活中,我们经常利用浏览器去打开一些URL来获取我们所需的资源,那么作为一个开发者或者性能测试工程师,如何去测试并提升优化前端的性能呢? 一.浏览器打开URL和方式和过程 不同浏览器工作方式不完全一样,大体来讲,浏览器的核心是浏览器引擎:不同浏览器对W3C的规范支持不尽相同,在具体功能的实现上也不完全一致. 1.连接到URL所在的服务器 用户在浏览器地址栏输入URL,打开URL时,浏览器首先寻找该URL所在的服务器.通过向DNS服务器查询,获取该URL所在网站的IP地址,然后浏览器向该

CSS3与页面布局学习总结(八)——浏览器兼容与前端性能优化

目录 一.浏览器兼容 1.1.概要 1.2.浏览器内核 1.3.浏览器市场份额(Browser Market Share) 1.4.兼容的一般标准 1.5.CSS Reset 1.6.CSS Hack 1.6.1.条件注释法 1.6.2.样式内属性标记法 1.6.3.选择器前缀法 1.7.文档模式 (X-UA-Compatible) 1.8.javascript兼容 二.前端性能优化 2.1.概要 2.2.减少HTTP请求数量 2.2.1.图片地图 2.2.2.精灵图片(Sprite) 2.2.

2017前端性能优化清单

https://github.com/Findow-team/Blog/issues/11?utm_source=tuicool&utm_medium=referral 2017前端性能优化清单 你开始使用渐进启动了么?是不是已经使用过React和Angular中tree-shaking和code-splitting两个工具?有没有用过Brotli.Zofli和HPACK这几种压缩技术,或者OCSP协议(在线证书状态协议)?知不知道资源提醒,客户端提醒和CSS containment一类的技术?

前端性能分析

前端性能分析 最近在读一本经典书<高性能网站建设进阶指南>. 虽然书籍很多年前就出版了,但里面的内容还是耐人寻味,这次就好好的实践了一下. 纸上得来终觉浅,绝知此事要躬行,实践中将会发现一些问题. 有个官方网址<Even Faster Web Sites>,点击“Run the Examples”按钮,就能进入在线demo. 在Github上面有个叫awesome-wpo的项目,里面记录了各个方面关于性能的资源,有书籍.文章.工具等. 下面所有的实验都是在Chrome 49浏览器中