我编写了一个在域上运行并从各种其他域(第 3 方资源)获取图像的脚本。
我正在尝试使用 window.performance.getEntriesByType('resource')
进行一般健康检查。看来,由于这些资源位于其他域,因此响应需要在响应 header 中设置 Timing-Allow-Origin
以通过 window.performance.getEntriesByType()< 获取计时数据
.
这是真的吗?
此外,当我运行我的脚本时,Chrome 浏览器确实返回了有用的信息。事实上,如果我能以编程方式获取这些数据,我就可以使用它。但是 Chrome 显示的数据和 window.performance.getEntriesByType()
中返回的数据不同。
我附上了一张截图,它显示了 Chrome 加载资源的有用时间分解。通过性能条目对象的数据不匹配。
比如看右边时序图中的DNS Lookup时间,再看性能入口对象中的domainLookupStart和domainLookupEnd值。这些值彼此不匹配。
为什么会出现差异?如何获取 Chrome 的数据?我如何从性能条目对象中获取 Chrome 显示的内容?
谢谢!
最佳答案
你现在可能已经想通了,但我有一个类似的问题并找到了这个。
对于未设置 Timing-Allow-Origin
header 的跨源资源,PerformanceResourceTiming
对象中的大多数详细字段报告为零,as per the spec :
connectStart must return zero unless timing allow check algorithm passes.
与其他字段类似,例如 DNS 查找字段。
至于为什么开发者控制台允许你看到这些信息,即使你无法通过编程方式访问它,这只是Chrome的一个功能,可以让你看到这些信息。隐藏它更多的是礼貌而不是安全功能;规范规定了可以通过 Resource Timing API 共享的内容,但浏览器仍然可以访问信息,并可能决定以其他方式与用户共享,如您所见。
关于javascript - 为什么 PerformanceResourceTiming 接口(interface)值与浏览器值不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32471973/