跳转至

为浏览器场景记录计时

结果

浏览器场景网络事件不记录时间,因此场景生成的每条记录都没有时间信息。环境状态视图随后按位置对记录排序,检测不到任何重叠请求,也无法获知写入时钟:一个更新,若其响应携带了应用程序设置的修改时间,则无论该更新如何被记录,都会被当作 unexplained-change 而不予接受;而同一会话的 HAR 则会通过一条时钟规则将其提供出来。场景网络事件现在会记录每个请求被观测到的时间以及浏览器所花费的时长,场景记录也像 HAR 条目一样携带这些信息,因此场景捕获能像 HAR 一样获知时钟。

要求

  • 每个 request 事件都会携带 observed_at,即提供者观测到请求开始时的 ISO 挂钟时间;Playwright 只在请求结束后才报告浏览器的开始时间。
  • 当浏览器报告这些值时,每个 request-finished 和 request-failed 事件都会携带 started_at(浏览器的挂钟开始时间,timing().startTime > 0)和 elapsed_ms(从该开始到响应结束的时间,timing().responseEnd >= 0)。
  • 这些字段在 schema 中是可选的,因此早于这些字段捕获的 Evidence 仍能被解析,并且读取方式与之前完全一致。早于这些字段的 REA 版本会拒绝携带这些字段的 Evidence。
  • 场景记录从该事务的单个 finished 或 failed 事件的 started_at 中取 startedDateTime,否则从 observed_at 中取;同时从其 elapsed_ms 中取 time(没有该字段则为 0),并在限制说明中如此声明;如果一次捕获的所有请求均已计时,该捕获就会获得记录开始时间的时间线和写入时钟。
  • 场景比较会忽略这两个字段,这一行为来自一条已提交的内置规则(ignore_network_request_timing)。
  • 新增的元数据与其它元数据一样,会计入事件预算。

非目标

  • 不改变 HAR 捕获,不改变状态对时间的使用方式,也不改变记录的时间信息对重叠或时钟规则的含义。
  • 不对此次更改之前进行的捕获追溯计时。
  • 对于从未结束的请求,不提供浏览器开始时间:其记录从 observed_at 开始,该时间在提供者读取其他响应时可能落后于浏览器的开始时间几十毫秒,且没有持续时间。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 rea2/rea