我正在检测连接速度,因此我计划使用window.performance对象进行持续时间计算。
我对window.performance.timing对象很困惑,它基于整个页面加载或基于最后的请求和响应生成。
例如:
我有5个服务器调用网页加载,performance.timing
对象是基于所有5个服务器调用或基于第5个服务器调用(最后一个调用)生成的。
参考连接速度计算参考
var bitsLoaded = 100000; //bits total size of all files (5 server call).
var duration = performance.timing.responseEnd - performance.timing.navigationStart;
var speedBps = Math.round(bitsLoaded / duration);
var speedKbps = (speedBps / 1024).toFixed(2);
var speedMbps = (speedKbps / 1024).toFixed(2);
任何不清楚的事情都准备解释
关于window.performance的任何想法
答案 0 :(得分:44)
不确定此图表是否能让您更好地了解performance.timing。
对于您的问题:
我有5个服务器调用网页加载,performance.timing对象 基于所有5个服务器调用或基于第5个生成 服务器呼叫(最后一次呼叫)。
答案是:performance.timing
基于所有请求和响应生成(但不包括ajax)。
对于您提供的示例连接速度计算脚本,我猜以下更好。
var duration = performance.timing.responseEnd - performance.timing.responseStart;
原因是:从navigationStart
到responseEnd
的持续时间包括DNS时间,该时间不会将任何数据从服务器传输到客户端。
有关时间的定义,请参阅https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/NavigationTiming/Overview.html。
答案 1 :(得分:1)
performance.timing不基于最后的请求和响应。它测量页面生命周期中 navigationStart 阶段和 loadEventStart 阶段之间的延迟。正如here所述,它的主要用途是确定页面加载速度。
在我看来。 performance.timing实际上不能用于测量连接速度,因为它已经启动用户后,用户收到了响应,并且是一个在浏览器上运行的javascript对象。我建议您只需ping用户并使用往返时间。