Firefox 预取下一页:Datasette 的分页隐性开销
没有点击翻页,也会请求下一页
在 Firefox 网络面板中观察 Datasette 表格页面时,可以发现:打开当前页会触发对下一页数据的 HTTP 预取。
触发这一行为的是页面返回的 Link 响应头,其中通过 rel="next" 标记下一页地址。其结构如下,地址以占位符表示:
Link: <下一页地址>; rel="next"
这意味着,分页地址不仅用于描述页面之间的关系,还可能促使 Firefox 提前获取下一页内容。
额外请求的成本
如果用户最终没有点击“下一页”,这次预取就没有用于实际浏览,却仍然带来两端的开销:
- 浏览器端:下载了用户未必会查看的内容。
- 服务器端:需要渲染并返回完整的下一页 HTML,而用户可能根本不会打开它。
Datasette 的 #3046 议题因此提出:对于面向 Firefox 的 HTML 页面,不应发送带有 rel="next" 的 Link 响应头。这里描述的是议题中的建议,并不代表修复已经完成。
一个延续多年的行为
Firefox 关于这一行为的缺陷讨论已持续约 24 年,早期评论还提及了 2002 年对同一预取功能的批评。
这个案例提醒开发者:排查分页页面的额外请求时,除了检查前端脚本,也值得查看 HTTP 响应头是否触发了浏览器预取。
浏览(23)
