【问题标题】:navigationStart time set to 0 when using HTML5 Navigation Timing API使用 HTML5 Navigation Timing API 时,navigationStart 时间设置为 0
【发布时间】:2012-08-23 15:35:52
【问题描述】:

我正在使用 HTML5 Navigation Timing API 来测量用户在我的网站上感知的页面加载时间。

我正在使用以下代码来测量页面加载时间。

function recordLoadTime () {
/* Process load time using "Navigation Timing" */
if (typeof(window.performance) !== "undefined" && typeof(window.performance.timing) !== "undefined") {
    if (window.performance.timing.loadEventEnd > 0) {
        var time = window.performance.timing.loadEventEnd - window.performance.timing.navigationStart;
    } else {
        setTimeout(recordLoadTime, 1000);
    }
}
}

time 变量也被添加到 cookie 中,并在用户后续请求中记录在服务器上。

我遇到的问题是记录的时间非常接近当前纪元时间,即 navigationStart 设置为 0 但 loadEventEnd 具有非零值(即当前纪元时间)

我在 Chrome/11.0、Chrome/12.0、MSIE 7.0、MSIE 8.0 和 MSIE 9.0 上看到了这种行为

我通过修改上面的代码暂时解决了这个问题,只在navigationStart大于0时记录加载时间。但我希望记录所有服务页面的加载时间。

【问题讨论】:

  • 根据NavigationTiming specnavigationStart 应该始终非零。其他任何事情都是错误,应报告给供应商。这可能在最近版本的 Chrome 中已修复,因为它尚未被广泛报道。注意 IE8 没有 NavigationTiming 支持。
  • 我知道这已经过时了,但我想你会很高兴知道即使是 Google 也考虑了分析跟踪代码中 navigationStart 为 0 的情况。可能说了一些关于供应商支持的事情......

标签: html navigation-timing-api


【解决方案1】:
window.onload = function()
{
  setTimeout(function(){
  var t = performance.timing;

}, 0);

【讨论】:

  • 这只会测量页面下载子资源、呈现和触发加载事件(丢弃 DNS、TCP 和 HTML 的请求/响应)所花费的时间。
  • 当然,但问题是为什么navigationStart 0,原因是他要求数据太快,需要等待下一个tick。如果这让提问者感到困惑,无法将我的答案标记为正确,我将删除日志记录部分;)
  • navigationStart 永远不应为 0,因为它应该表示自 Unix 纪元以来导航开始的秒数。即使你在头部的脚本中查询它,navigationStart 也应该是非零的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多