NavigationTimingAPI可以用于异步调用吗?

时间:2019-02-25 11:32:23

标签: javascript navigation-timing-api resource-timing-api

我目前正在使用自定义元素v1的项目中实现性能评估功能。

NavigationTimingAPI对不同的导航类型(导航,重新加载,浏览器后退/前进)进行了非常详细的测量:

enter image description here

是否可以为异步调用提供相同(或类似的详细信息)?还是有另一个我不知道的API?

也就是说,当页面完全加载并且某些用户交互或事件触发服务器定位资源上的POST或GET时。

到目前为止,我发现的唯一一件事就是使用performance.mark()设置测量点。

我在这里错过了重要的事情吗?

2 个答案:

答案 0 :(得分:1)

您为 Navigation Timing 命名,并用performance.mark()找到了 User Timing ,但错过了Resource Timing API。这三个都是 Performance Timing API 的一部分。

导航时间测量主页或应用。 Resource Timing API (资源计时API)类似,但是为每个异步加载的资源提供了它,以使它们相对于导航时间受到损害。

考虑一下: 异步加载的文件没有DOM可运行 !这意味着在资源计时中缺少dom属性。但是开始部分与导航时间相同:

enter image description here

startTime 是Performance Timing API的最重要属性吗?每个不同步的呼叫都有自己的! startTime 对于文档为0,对于Javascript文件和资源为>0 ms。

startTime 是第一个记录的时间戳-度量的来源。它标记了浏览器首次开始加载资源过程的时间。在资源计时startTime is same as fetchStart or redirectStart (if not zero)中,在计时资源时。

作为CSS或图像的资源既没有dom也没有执行权限,但是扩展名为.js的资源将执行Javascript,因此您已经发现performance.mark()可能会给用户计时。

  
      
  • 是否可以将NavigationTimingAPI用于异步调用?
  •   

是和否。资源计时会自动获得相对于导航计时相对有效的标记。是的,但是没有:测量index.html(导航)和测量异步调用(资源)是不一样的:
performance.getEntriesByType("navigation")更改为performance.getEntriesByType("resource")

答案 1 :(得分:0)

我错过了明显的地方。

每个XMLHTTPRequest及其所有适用的详细信息都将自动作为PerformanceResourceTiming对象出现在

performance
  .getElementsByType("resource")
  .filter(function(x) { 
    return x.initiatorType === "xmlhttprequest";
  });

我只是在查看performance.timing对象(实际上是唯一无法通过performance.getElementsByType()使用的对象)。