当前位置:首页 > 科技  > 软件

前端性能指标--首屏时间统计

来源: 责编: 时间:2023-11-28 09:37:16 169观看
导读Part 01 白屏和首屏时间 - 白屏:从用户请求页面开始到显示第一个字符的时间。中间包括DNS查询、建立TCP链接、发送首个HTTP请求、返回HTML文档、HTML文档head解析完毕。通常认为浏览器开始渲染标签或者解析完标签的时

PLo28资讯网——每日最新资讯28at.com

Part 01 白屏和首屏时间 

- 白屏:从用户请求页面开始到显示第一个字符的时间。中间包括DNS查询、建立TCP链接、发送首个HTTP请求、返回HTML文档、HTML文档head解析完毕。通常认为浏览器开始渲染标签或者解析完标签的时刻就是页面白屏结束的时间点。PLo28资讯网——每日最新资讯28at.com

- 首屏:指用户打开网站开始,到浏览器首屏内容渲染完成的时间,对于用户体验来说,首屏时间是用户对一个网站的重要体验因素。PLo28资讯网——每日最新资讯28at.com

Part 02 PerformanceTiming 

performance.timing记录了用于分析页面整体性能指标的关键时间点,包含网络、解析等一系列的时间数据。最好在页面完全加载完成之后再使用,因为很多值必须在页面完全加载之后才能得到。最简单的办法是在window.onload(vm.$nextTick 或 react hooks useEffect)事件中读取各种数据。PLo28资讯网——每日最新资讯28at.com

在浏览器控制台,console输入performance可以查看到performance.timing相关时间节点:PLo28资讯网——每日最新资讯28at.com

PLo28资讯网——每日最新资讯28at.com

图1 performance.timing参数介绍PLo28资讯网——每日最新资讯28at.com

通过PerformanceTiming不仅可以帮助我们省去繁琐的手动打点操作,还可以帮助我们获取很多其他数据,对于整个时间节点的对应关系:下图显示了PerformanceTiming中定义的所有时间戳属性。PLo28资讯网——每日最新资讯28at.com

PLo28资讯网——每日最新资讯28at.com

图2 performance.timing参数说明PLo28资讯网——每日最新资讯28at.com

比较有用的页面性能数据大概包括如下几个:PLo28资讯网——每日最新资讯28at.com

重定向耗时:redirectEnd - redirectStartPLo28资讯网——每日最新资讯28at.com

DNS查询耗时:domainLookupEnd - domainLookupStartPLo28资讯网——每日最新资讯28at.com

TCP链接耗时:connectEnd - connectStartPLo28资讯网——每日最新资讯28at.com

HTTP请求耗时:responseEnd - responseStartPLo28资讯网——每日最新资讯28at.com

解析dom树耗时:domComplete - domInteractivePLo28资讯网——每日最新资讯28at.com

白屏时间:responseStart - navigationStartPLo28资讯网——每日最新资讯28at.com

DOM ready时间:domContentLoadedEventEnd - navigationStartPLo28资讯网——每日最新资讯28at.com

onload时间:loadEventEnd – navigationStartPLo28资讯网——每日最新资讯28at.com

Part 03 MutationObserver API 

MutationObserver API让我们能监听dom树变化,在首屏的加载中,会涉及到dom的增加、修改、删除,所以会触发多次MutationObserver。PLo28资讯网——每日最新资讯28at.com

1)利用MutationObserver监听document对象,每当dom变化时触发回调函数;PLo28资讯网——每日最新资讯28at.com

2)判断监听的dom是否在首屏内,如果在首屏内,将该dom放到指定的数组中,记录下当前dom变化的时间点;PLo28资讯网——每日最新资讯28at.com

3)在MutationObserver的callback函数中,通过防抖函数,监听document.readyState状态的变化;PLo28资讯网——每日最新资讯28at.com

4)当document.readyState === 'complete',停止定时器和 取消对document的监听;PLo28资讯网——每日最新资讯28at.com

5)遍历存放dom的数组,找出最后变化节点的时间,就是首屏加载完成的时间。PLo28资讯网——每日最新资讯28at.com

监听container外层容器的变化,当触发回调函数时,判断对应的事件类型以及新增加的子dom是否是首屏展示的dom节点。PLo28资讯网——每日最新资讯28at.com

PLo28资讯网——每日最新资讯28at.com

尽管现在的MutationObserver在移动端兼容性比较好,但为了更好的兼容,我们可以另外引入MutationEvents API。PLo28资讯网——每日最新资讯28at.com

Part 04 webview里H5页面首屏时间

PLo28资讯网——每日最新资讯28at.com

4.1 WebView初始化阶段

该阶段包括几个主要步骤:PLo28资讯网——每日最新资讯28at.com

(1)开始解析Url(Url中可能包含${}需要解析的字段)PLo28资讯网——每日最新资讯28at.com

(2)完成解析UrlPLo28资讯网——每日最新资讯28at.com

(3)开始校验Url是否可以打开PLo28资讯网——每日最新资讯28at.com

(4)结束校验UrlPLo28资讯网——每日最新资讯28at.com

(5)开始加载Url到webview容器PLo28资讯网——每日最新资讯28at.com

和家亲app jsbridge提供了getPerformInfo方法可以帮助我们获取WebView性能数据:PLo28资讯网——每日最新资讯28at.com

WebViewUrlLoaded WebView加载url时间:startLoadUrl(开始加载Url到webview容器) - startProcessUrl(开始解析Url);PLo28资讯网——每日最新资讯28at.com

4.2 HTTP请求服务阶段

该阶段包括几个主要步骤:PLo28资讯网——每日最新资讯28at.com

(1) DNS查询PLo28资讯网——每日最新资讯28at.com

(2) 等待 TCP 队列PLo28资讯网——每日最新资讯28at.com

(3) TCP链接PLo28资讯网——每日最新资讯28at.com

(4) 发起http请求和响应PLo28资讯网——每日最新资讯28at.com

(5) 服务器端处理HTTP请求,服务器端处理HTTP请求,浏览器得到html代码PLo28资讯网——每日最新资讯28at.com

(6) 开始head解析PLo28资讯网——每日最新资讯28at.com

该阶段的时间从webview容器开始加载Url开始到完成head解析,可以使用window.performance.timing.responseStart - startLoadUrl(开始加载Url到webview容器)PLo28资讯网——每日最新资讯28at.com

4.3 静态资源下载

该阶段包括几个主要步骤:PLo28资讯网——每日最新资讯28at.com

(1) head解析并开始请求静态资源(如js、css、图片等)PLo28资讯网——每日最新资讯28at.com

(2) 静态资源下载完成PLo28资讯网——每日最新资讯28at.com

(3) 开始解析静态资源PLo28资讯网——每日最新资讯28at.com

该阶段的时间从开始请求静态资源,到开始解析静态资源(比如JS),我们可以在js文件开始自定义JscriptLaunch字段,并赋值给window.preformance对象,(window.PerformInfo || (window.PerformInfo = {})).JscriptLaunch = new Date().getTime(); 以便于我们统计该阶段的时间:window.PerformInfo.JscriptLaunch - window.performance.timing.responseStart。PLo28资讯网——每日最新资讯28at.com

4.4 API调用和首屏dom渲染

该阶段包括几个主要步骤:PLo28资讯网——每日最新资讯28at.com

(1) 开始解析静态资源,请求APIPLo28资讯网——每日最新资讯28at.com

(2) 响应数据PLo28资讯网——每日最新资讯28at.com

(3) 下载资源并渲染domPLo28资讯网——每日最新资讯28at.com

(4) 首屏内容加载完成PLo28资讯网——每日最新资讯28at.com

利用MutationObserver监控DOM的变化,获取首屏dom加载完成的时间,用该时间点减去window.PerformInfo.JscriptLaunch,就获得了该阶段的时间。PLo28资讯网——每日最新资讯28at.com

Part 05 数据上报

将统计到的数据以图片打点、fetch请求或Beacon等形式进行上报,可以帮助我们后续进行分析和优化。PLo28资讯网——每日最新资讯28at.com

5.1 直接发请求上报

直接将数据通过ajax发送到后端有一个问题,就是在页面卸载或刷新时进行上报的话,请求可能会在浏览器关闭或重新加载前还未发送至服务端就被浏览器cancel掉,导致数据上报失败。PLo28资讯网——每日最新资讯28at.com

5.2 利用图片上报

服务器端并不关心具体的数据上报方式,无论是请求image文件还是请求其他普通文件(JS)或者是请求接口,可以进行数据上报。PLo28资讯网——每日最新资讯28at.com

使用image有几个优点:PLo28资讯网——每日最新资讯28at.com

图片的src属性并不会跨域,不会出现跨域问题;PLo28资讯网——每日最新资讯28at.com

大部分浏览器会延迟卸载(unload)文档以加载图像,可以避免第一种方法的问题;PLo28资讯网——每日最新资讯28at.com

只要在js中new出Image对象就能发起请求,不用插入dom中,可以防止阻塞页面加载,影响用户体验;PLo28资讯网——每日最新资讯28at.com

相比PNG/JPG,GIF的体积最小,最适合进行上报,一般采用1*1像素的透明gif进行上报。PLo28资讯网——每日最新资讯28at.com

5.3 css定义content

通过css定义content,按钮点击就会上报,但是不能动态传入一些变量。PLo28资讯网——每日最新资讯28at.com

PLo28资讯网——每日最新资讯28at.com

5.4 Beacon

Beacon可将数据异步发送至服务端,且可能保障在页面卸载实现前发送申请(解决页面卸载会终止请求的问题)。PLo28资讯网——每日最新资讯28at.com

PLo28资讯网——每日最新资讯28at.com

Part 06 总结

页面首屏加载时间是个重要的性能指标,通过上面的方式对首屏时间进行统计分析,可以帮助我们有针对性的进行性能优化。同时页面性能的提升,带给用户更好的产品体验,这样才会得到好的产品反馈,给企业带来价值。PLo28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-34681-0.html前端性能指标--首屏时间统计

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Javascript的闭包有哪些应用?你学会了吗?

下一篇: 一文搞懂Go gRPC服务Handler单元测试

标签:
  • 热门焦点
Top