指纹

--bot-performance-timing:浏览器指纹中的性能计时信号

了解 --bot-performance-timing 的基础与高级模式、Performance Timing API 的可观察面,以及代理和反爬交叉校验的边界。

文档中心

想直接进入 指纹 文档吗?

这篇文章属于博客内容库。若你要步骤化配置、参考说明和持续更新,请直接进入对应 docs 分区。

--bot-performance-timing 在浏览器中保持页面可观察计时面的内部一致。它不保证网站接受某个会话,也不会隐藏代理或服务器能够观察到的网络事实。更准确的问题是:这些数值是否描述了一个合理的导航和资源加载生命周期?

基础与高级性能计时路径汇聚为浏览器可观察的一致数值

该参数控制什么

页面可以读取 performance.now()、PerformanceNavigationTiming、PerformanceResourceTiming,以及仍可用的旧式 performance.timing。只修改一个 getter 会与其他视图产生矛盾。该参数作用于浏览器的计时模型,让这些视图描述同一个生命周期。

BotBrowser 公开说明了两个级别。基础模式为普通配置保留合理且相互一致的计时。高级模式应用文档化的计时区间,具体参数仍处于实验阶段。issue 没有定义全局或页面级 seed;可复现的参考是不可变原始计时查询及其稳定摘要。模式名称描述范围,不是检测评分,也不是“不可识别”保证。

选择模式前先定义观察窗口。首次冷加载、恢复的页面和单页应用的路由变化会暴露不同事件。把这个上下文与模式一起记录,可以避免把预期的生命周期差异误判为配置缺陷。

基础模式:一致的生命周期

基础模式保持阶段顺序:请求开始早于响应结束,真实导航具有非零阶段,同一条目重复读取时保持稳定。现代条目与旧对象来自同一个生命周期。

这并不让所有页面耗时相同。缓存、网络、重定向、service worker 和 CPU 调度都会影响结果。已定稿的 resource 条目及 responseEnd 之后的 navigation 重复读取应保持稳定;在 responseEnd 之前,导航定稿时允许从基础到高级的一次变化。目标是避免选择性修改造成的人工矛盾,而不是抹平自然差异。应用应把计时当作诊断上下文,而不是身份标识。

基础模式也适合作为兼容性基线。应在浏览器常规隐私精度和应用支持的缓存状态下运行。如果测量不可用,让功能使用文档化的降级路径,不要填入合成数字。

高级模式:视图间的实验性区间

高级模式应用文档化的计时区间,同时保持有效导航的形状。它没有全局或页面级 seed。已定稿的 resource 条目以及 responseEnd 之后的 navigation 重复读取保持稳定;在 responseEnd 之前,条目定稿时允许从基础到高级的一次变化。区间参数仍处于实验阶段,应比较有边界的负载,而不是比较身份分布。

公开 issue 覆盖 getEntries()、navigation 和 resource 条目、performance.timing 以及 performance.toJSON(),并提到不可变原始计时查询和稳定摘要,但没有定义全局或页面级 seed。因此,验收应比较多个视图:对应阶段保持在文档规定的容差内,并表示同一事件序列。高级模式是实验性的区间配置,不是新的 seed 身份。

区间配置应视为实验性测试数据。稳定摘要属于不可变原始计时查询,而不是全局或页面级 seed,也无法冻结服务器负载、操作系统调度或不断变化的 JavaScript 包。比较运行结果时应保留这些负载变量。

页面能够观察什么

Performance API 提供经过浏览器精度和隐私降精度策略处理的时长与条目。页面可以观察导航阶段、资源请求、自己创建的 mark,以及仍可用的旧对象;也可以比较顺序、零与非零状态,以及条目之间的关系。

这些信息描述当前文档及其加载环境,不是可靠的 CPU 测量或身份判断。缓存、后台任务和浏览器策略都会改变样本。性能计时指南 将它放在更广泛的隐私审查中,同时保持各信号边界清晰。

这种分离也有助于处理事故。资源变慢可能来自缓存未命中、路由问题,或响应到达后的应用工作。先确认生命周期和测量归属,再检查只回答其他问题的相邻信号。

与代理和反爬校验的交叉关系

计时只是一个层次。服务可以把浏览器导航阶段与服务器收到请求的时间、连接复用、重定向和缓存头进行比较。代理可以增加延迟或改变路由,却不一定改变浏览器本地 API。合理的本地计时也不能掩盖不一致的路由、TLS 配置或 IP 声誉。

在获得授权的质量检查中,应比较信号类别:浏览器条目、服务器时间戳和代理健康事件应回答同一个运维问题。为具体负载设置容差,不要发布检测阈值。资源缺失或超时仍应进入可用的降级路径。可参考网络层一致性指南。

发现不一致时保留原始类别和时间戳,不要把所有结果压成“bot”标签。这样可以修复代理路由、缓存策略或页面回归,而不必无谓地改变计时模式。

限制与负责任使用

该参数不会扩展 Performance API 的浏览器支持,不会让不同操作系统产生完全相同的值,也不会消除所有计时变化。它不能授权访问,也不能证明会话来自真人。请把它用于可复现测试、配置一致性和隐私审查;不要把原始计时轨迹与账户标识合并,也不要超出诊断目的保留。

发布配置前,验证真实导航的阶段有序且非零、现代与旧视图相互吻合、资源缺失时应用仍可使用。把模式和区间配置记录为测试元数据而非用户标识。浏览器升级后重新核对公开契约,因为 API 可用性和精度策略可能变化。

让测试夹具可观察,但不要让它具备身份识别性。使用短期运行标识、浏览器版本、配置修订号和负载名称,就足以关联页面、服务器和网关记录。把关联键限制在本次运行,导出轨迹前移除查询参数,诊断窗口结束后只保留聚合结果。这样既能解释计时变化,也不会形成持久的跨会话信号。

回归检查应记录测试配置、浏览器版本和聚合结果。这样可以重复诊断,而不会把计时测量变成用户标识。

安全读取导航条目

导航条目描述一次文档请求,但字段含义并不相同。重定向、service worker、缓存命中和预渲染会改变可见阶段。应把它当作生命周期记录读取,不要把不同加载状态混作同一事件。

先检测 API,再处理空条目列表。回退缓存恢复或尚未完成阶段的文档,可能暂时没有同样字段。可选测量缺失时不应阻塞主要任务,也不要为替代信号收集额外标识。

不过度解读资源计时

资源条目有助于解释脚本、图片或请求变慢,但不是完整网络追踪。精度策略、Timing-Allow-Origin、service worker 和缓冲区淘汰都可能隐藏或移除条目。

记录性能结果时优先使用“预览完成”或“字体回退可见”等聚合结果。需要支持轨迹时应明确同意、限制保留时间,并移除不相关的查询参数和标识符。

标记、测量与应用工作

performance.mark() 与 performance.measure() 描述页面自己命名的工作,不等同于导航阶段。长测量可能包含调度、用户输入或后台标签页延迟。

保持名称稳定并记录测量范围。跨越可选请求的测量应分别记录取消和重试,使回归结果可操作而不会形成跨会话画像。

精度、隐私与可重复性

浏览器会降低部分时钟精度,跨源隔离、安全策略、后台限流和版本升级都会改变分辨率。测试应断言顺序、合理的非零状态和条目关系,而不是一个精确小数。

高级模式适合受控负载下的文档化区间。记录模式、区间配置、浏览器版本、配置和负载名称。稳定摘要描述不可变原始计时查询,不是用户属性。服务器负载和网络拥塞仍会变化,应比较范围而非单个样本。

检查代理路径

计时审查应明确边界:浏览器负责本地条目,服务器负责接收时间和状态,网关负责路由健康与连接失败。比较可以定位慢段,但不能断言某一层造成全部延迟。

用授权的合成端点覆盖热缓存、冷缓存、重定向、可选资源失败和重试。比较阶段和结果,不要用微秒差异给浏览器分类;网络变更应按网络变更审查。

反爬信号不是单一 API

反爬系统可能结合浏览器 API、服务器观察、账户历史、速率和传输元数据。该参数只处理浏览器侧的一致性,不会改写 IP、TLS、cookie 或认证事件。

授权集成应记录可测与不可测内容,不要复制私有挑战逻辑。验证精度降低、条目缺失或路由变慢时应用仍可用,得到兼容性结论即可。

有界发布清单

先用基础模式验证代表性配置的导航和资源条目;只有在文档化测试或策略需要时才加入实验性的高级区间。每种模式保留现代条目与旧对象的对照夹具。

发布期间比较完成、取消、重试和恢复结果,不比较用户的原始计时轨迹。浏览器升级后先检查 API、精度、缓存和负载,再决定是否调整配置。

把模式、区间配置、版本、夹具和聚合结果作为简短可复现记录。页面在可选信号缺失时仍可用,就保留该降级行为,不新增采集路径。

应把预期的降级路径写入验收条件。

在已知精度策略下,条目缺失可以是可接受结果。

应把缓存状态与网络故障分开记录。

让每次检查都对应应用的可见结果。

不要用修改区间配置来补偿整体精度下降。

记录每个时间戳的归属方。

来源

#性能计时#浏览器指纹#Navigation Timing#隐私

让 BotBrowser 从研究走向生产

先用这些指南理解模型,再进入跨平台验证、隔离上下文和面向规模化的浏览器部署。