119  
查询码:00000954
【web性能】获取web各个阶段响应时间:服务器响应时间、首页白屏时间、dom渲染完成时间等...
来源:https://blog.csdn.net/weixin_33691700/article/details/88917273?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnP...
作者: 朱凡 于 2020年06月19日 发布在分类 / FM组 / FM_App 下,并于 2020年06月19日 编辑
时间 响应 请求 应时 服务 服务器 博客 页面 性能 一个

【web性能】获取web各个阶段响应时间:服务器响应时间、首页白屏时间、dom渲染完成时间等...


【web性能】Web performance 获取web各个阶段响应时间:DNS解析时间、TCP建立连接时间、首页白屏时间、dom渲染完成时间、页面onload时间等

准确地测量web应用程序的性能特性是使web应用程序更快的一个重要方面

那么我们怎么知道一个网站加载定的时间呢?

我们可以添加时间戳标记

下面的JavaScript显示了一个简单的尝试来度量完全加载页面所需的时间:

<html>
<head>
<title>stark wang</title>
<script type="text/javascript">
var start = new Date().getTime();
function onLoad() {
 var now = new Date().getTime();
 var latency = now - start;
 alert("page loading time: " + latency);
}
</script>
</head>
<body onload="onLoad()">
<!- Main page body goes from here. -->
</body>
</html>

结果:

上面的脚本计算在执行头部的第一个JavaScript后加载页面所需的时间,但是它并没有给出从服务器获取页面所需的时间,或者页面的初始化生命周期。

PerformanceNavigationTiming接口

使用以下脚本得到更多信息

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>stark wang</title>
</head>
  <script>
function showNavigationDetails() {
 // 入口
 const [entry] = performance.getEntriesByType("navigation");
 // 在控制台可以看到很多参数
 console.table(entry.toJSON());
}
</script>
<body onload="showNavigationDetails()">

</body>
</html>


自己去测试
这个接口省去我们很多时间,不再需要获取时间戳了

处理模型


参数说明

navigationStart 加载起始时间
redirectStart 重定向开始时间(如果发生了HTTP重定向,每次重定向都和当前文档同域的话,就返回开始重定向的fetchStart的值。其他情况,则返回0)
redirectEnd 重定向结束时间(如果发生了HTTP重定向,每次重定向都和当前文档同域的话,就返回最后一次重定向接受完数据的时间。其他情况则返回0)
fetchStart 浏览器发起资源请求时,如果有缓存,则返回读取缓存的开始时间
domainLookupStart 查询DNS的开始时间。如果请求没有发起DNS请求,如keep-alive,缓存等,则返回fetchStart
domainLookupEnd 查询DNS的结束时间。如果没有发起DNS请求,同上
connectStart 开始建立TCP请求的时间。如果请求是keep-alive,缓存等,则返回domainLookupEnd
(secureConnectionStart) 如果在进行TLS或SSL,则返回握手时间
connectEnd 完成TCP链接的时间。如果是keep-alive,缓存等,同connectStart
requestStart 发起请求的时间
responseStart 服务器开始响应的时间
domLoading 从图中看是开始渲染dom的时间,具体未知
domInteractive 未知
domContentLoadedEventStart 开始触发DomContentLoadedEvent事件的时间
domContentLoadedEventEnd DomContentLoadedEvent事件结束的时间
domComplete 从图中看是dom渲染完成时间,具体未知
loadEventStart 触发load的时间,如没有则返回0
loadEventEnd load事件执行完的时间,如没有则返回0
unloadEventStart unload事件触发的时间
unloadEventEnd unload事件执行完的时间

实战案例

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

DNS解析时间: domainLookupEnd - domainLookupStart
TCP建立连接时间: connectEnd - connectStart
白屏时间: responseStart - navigationStart
dom渲染完成时间: domContentLoadedEventEnd - navigationStart
页面onload时间: loadEventEnd - navigationStart

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);

结果:

兼容性:



 推荐知识

 历史版本

修改日期 修改人 备注
2020-06-19 08:40:15[当前版本] 朱凡 创建版本

 附件

附件类型

PNGPNG

知识分享平台 -V 4.8.7 -wcp