我目前正在使用自定义元素v1的项目中实现性能评估功能。
NavigationTimingAPI对不同的导航类型(导航,重新加载,浏览器后退/前进)进行了非常详细的测量:
是否可以为异步调用提供相同(或类似的详细信息)?还是有另一个我不知道的API?
也就是说,当页面完全加载并且某些用户交互或事件触发服务器定位资源上的POST或GET时。
到目前为止,我发现的唯一一件事就是使用performance.mark()
设置测量点。
我在这里错过了重要的事情吗?
答案 0 :(得分:1)
您为 Navigation Timing 命名,并用performance.mark()
找到了 User Timing ,但错过了Resource Timing API。这三个都是 Performance Timing API 的一部分。
导航时间测量主页或应用。 Resource Timing API (资源计时API)类似,但是为每个异步加载的资源提供了它,以使它们相对于导航时间受到损害。
考虑一下: 异步加载的文件没有DOM可运行 !这意味着在资源计时中缺少dom属性。但是开始部分与导航时间相同:
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()
使用的对象)。