0

我正在收集一些回旋镖数据,但是返回的帧速率数据对我来说没有意义。

我的两个主要问题是

  1. 为什么帧率时间线数据不匹配
  2. 为什么TTI这么高

首先,我将给出我所看到的完整信标

c.e: "kb8jhepo"
c.f: 61
c.f.d: 524
c.f.m: 2
c.f.s: "kb8jhge3"
c.t.fps: "0*5*62"
c.tti: 2075
c.tti.m: "lt"
c.tti.vr: 948
if: ""
n: 1
nt_con_end: 1591744341954
nt_con_st: 1591744341954
nt_dec_size: 129958
nt_dns_end: 1591744341954
nt_dns_st: 1591744341954
nt_domcomp: 1591744343076
nt_domcontloaded_end: 1591744342895
nt_domcontloaded_st: 1591744342814
nt_domint: 1591744342577
nt_domloading: 1591744342159
nt_enc_size: 41324
nt_fet_st: 1591744341954
nt_first_paint: 1591744342325
nt_load_end: 1591744343120
nt_load_st: 1591744343082
nt_nav_st: 1591744341948
nt_nav_type: 1
nt_protocol: "h2"
nt_red_cnt: 0
nt_req_st: 1591744341964
nt_res_end: 1591744342373
nt_res_st: 1591744342144
nt_ssl_st: 1591744341954
nt_trn_size: 42860
nt_unload_end: 1591744342154
nt_unload_st: 1591744342154
pid: "a6ilbd4j"
pt.fcp: 377
pt.fp: 377
rt.si: "kd7mvv6mutl-NaN"
rt.sl: 0
rt.ss: undefined
ua.plt: "MacIntel"
ua.vnd: "Google Inc."
v: "1.0.0"
vis.st: "visible"

文档上,计算 TTI 的算法总结为 w/

Putting these two timers together, here's how we measure Visually Ready and Time to Interactive:

1. Determine the highest Visually Ready timestamp (VRTS):

  * Largest Contentful Paint (if available)
  * First Contentful Paint (if available)
  * First Paint (if available)
  * domContentLoadedEventEnd
  * Hero Images are loaded (if configured)
  * Framework Ready (if configured)

2. After VRTS, calculate Time to Interactive by finding the first period of 500ms where all of the following are true:

  * There were no Long Tasks
  * The FPS was always above 20 (if available)
  * Page Busy was less than 10% (if the above aren't available)

帧率

c.f等于 61,根据文档,它是持续时间基础上的平均帧速率。但是,当我获取中给出的时间线数据时,c.t.fps我得到了一个压缩值"0*5*62",当我根据他们的算法解压缩时,我得到了[6, 6, 6, 6, 6, 2],这显然不会平均到 61。

帧速率持续时间c.f.d为 524 毫秒,这就是为什么我有这么多数据点的原因,但我看不出平均值如何与时间线匹配。

额外的问题:有人可以提供有关何时开始和停止测量帧速率的见解吗?

TTI

TTI 更让 IMO 感到困惑。我从信标 2075 获得的值和使用的方法是lt(或 LongTask)。然而,其他数据点不支持作为 TTI 值。在 948 处,视觉准备就绪的时间要短得多,信标中没有长任务数据,所以大概这不是计算 TTI 的一个因素。

剩下的最后一件事是帧速率,如上所述,这对我来说似乎并不合适。我不清楚帧速率何时(或是否曾经)满足这些要求

4

1 回答 1

0

通过挑选回旋镖代码,我最终能够自己解决这个问题......

的数组[6, 6, 6, 6, 6, 2]更像是每 100 毫秒的帧数,而不是 fps。TTI 确实是在这个上计算的。

if (idleIntervals >= TIME_TO_INTERACTIVE_IDLE_INTERVALS) {
  tti = startTime + ((j - TIME_TO_INTERACTIVE_IDLE_INTERVALS) * COLLECTION_INTERVAL);

  // ensure we don't set TTI before TTVR
  tti = Math.max(tti, visuallyReady);
  break;
}

它真正的意思是连续的数量idleIntervals需要> = 5(TIME_TO_INTERACTIVE_IDLE_INTERVALS)。

在我上面的例子中,我们没有很长的任务数据,并且在 tti 之前有时间进行视觉准备,因此我们得到了每秒的帧速率。如上所述,我错误地解释了这些费率

当它使用 fps 来确定间隔是否空闲时,它使用以下代码

if (data.fps && (!data.fps[j] || data.fps[j] < TIME_TO_INTERACTIVE_MIN_FPS_PER_INTERVAL)) {
  // No FPS or less than 20 FPS during this interval
  idleIntervals = 0;
  continue;
}

TIME_TO_INTERACTIVE_MIN_FPS_PER_INTERVAL实际上2,是在这条线上计算的

/**
 * For Time to Interactive, minimum FPS per COLLECTION_INTERVAL.
 */
var TIME_TO_INTERACTIVE_MIN_FPS_PER_INTERVAL =
    TIME_TO_INTERACTIVE_MIN_FPS / (1000 / COLLECTION_INTERVAL);

所以每秒帧率是 tti 值的限制因素。对于 tti,测量的前 5 个帧速率值被认为是“好”的。但它仍然比 ttvr 高得多的原因是因为直到后来才开始测量帧速率。

开始测量帧速率的时间由信标值c.f.s(base36 编码的纪元时间)给出。回旋镖测量任何物体的时间由 给出c.e。如果您在 wiki 中的信标示例中获取这两者的差异,您会得到回旋镖返回的 tti 值

于 2020-06-12T02:41:58.520 回答