动态页面的数据什么时候到齐?固定 sleep 多久都不对:短了拿不到,长了浪费。这篇在一个延迟随机、有分阶段加载、还挂着长连接的本机页面上,比较固定等待、轮询元素、等元素数量到位和等网络空闲几种做法的成功率与多等的时间。
等待策略 拿到完整 20 条 平均耗时 平均多等
固定等待 0.5 秒 5 / 12 521 ms -82 ms
固定等待 1.5 秒 12 / 12 1519 ms 916 ms
轮询:出现第一个 .item 就继续 12 / 12 647 ms 44 ms
轮询:等到 20 个 .item 12 / 12 645 ms 43 ms
等网络空闲(0.3 秒内无请求,最长 6 秒) 12 / 12 932 ms 330 ms
("平均多等" = 平均耗时减去数据实际到齐所需的时间)数据到达时间随机时,固定 sleep 是一个糟糕的折中:0.5 秒只有 5 / 12 次够,1.5 秒才全部够,但平均多等 916 ms。要覆盖最慢的情形,就得为大多数情形多等很久。
等待策略 拿到完整 20 条 平均耗时 平均多等
固定等待 0.5 秒 0 / 12 519 ms -613 ms
固定等待 1.5 秒 11 / 12 1520 ms 387 ms
轮询:出现第一个 .item 就继续 0 / 12 592 ms -540 ms
轮询:等到 20 个 .item 12 / 12 1187 ms 54 ms
等网络空闲(0.3 秒内无请求,最长 6 秒) 12 / 12 1471 ms 338 ms
("平均多等" = 平均耗时减去数据实际到齐所需的时间)每 50 ms 检查一次期望的元素是否出现,耗时只比数据到齐多约 40 ms。但“出现第一个元素”不够:分两阶段加载时它在只有 5 条时就继续了(0 / 12);要等到期望的数量或某个“加载完成”的标志。
等待策略 拿到完整 20 条 平均耗时 平均多等
固定等待 0.5 秒 7 / 12 520 ms 38 ms
固定等待 1.5 秒 12 / 12 1518 ms 1036 ms
轮询:出现第一个 .item 就继续 12 / 12 523 ms 41 ms
轮询:等到 20 个 .item 12 / 12 528 ms 45 ms
等网络空闲(0.3 秒内无请求,最长 6 秒) 12 / 12 6035 ms 5552 ms
("平均多等" = 平均耗时减去数据实际到齐所需的时间)等“没有在途请求并且 0.3 秒内没有新请求”对分阶段加载有效(12 / 12),但平均多等 300 多毫秒(静默期本身);页面有长连接、轮询或推送时网络永远不空闲,只能等到超时上限(6035 ms)。