NavigationTimingAPI 可以用于异步调用吗?

Can the NavigationTimingAPI be used on asynchronous calls?

我目前正在我们的项目中实现性能测量功能,该项目使用自定义元素 v1。

NavigationTimingAPI 提供了对不同导航类型(导航、重新加载、浏览器 back/forward)的非常详细的测量:

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

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

到目前为止我唯一发现的是使用 performance.mark().

设置测量点

我是不是漏掉了一些重要的东西?

我错过了这里显而易见的地方。

具有所有适用详细信息的每个 XMLHTTPRequest 自动作为 PerformanceResourceTiming 对象在

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

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

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

Navigation Timing 测量主页或应用程序。 资源计时API类似,但它是为每个单独的异步加载资源提供的,以使它们与导航时间相关。

想想看:异步加载的文件没有DOM到运行!这意味着资源计时中缺少 dom-properties。但开始部分与导航时序相同:

Performance Timing API中最重要的属性startTime怎么样?每个异步调用都有自己的! startTime 对于文档是 0,对于 Javascript 文件和资源是 >0 毫秒。

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

作为 CSS 或图像的资源既没有 dom 也没有执行,但是具有 .js 扩展名的资源执行 Javascript,因此可以使用 performance.mark() 正如您已经发现的那样。

  • Can the NavigationTimingAPI be used on asynchronous calls?

是和否。Resource Timing 会自动获得标记,这些标记可以与 Navigation Timing 相关,从而进行非常有用的比较。所以是的 - 但不是:测量 index.html(导航)和测量异步调用(资源)是不一样的:
performance.getEntriesByType("navigation") 更改为 performance.getEntriesByType("resource")