
过去几年,我们写前端应用时,动不动就加骨架屏、loading 动画、励志文案,生怕用户在等待中流失。可问题是:用户仍然讨厌等待。
Chromium 内置的 Speculation Rules API 给了一个更优雅的答案:只要写 6 行 HTML,浏览器就能提前预取(prefetch)、甚至预渲染(prerender)下一页。
结果就是:用户点下去的一瞬间,页面已经准备好了。
没有 hack,没有复杂框架,就是浏览器原生能力。


<script type="speculationrules">。Speculation-Rules: /speculationrules.json,适合 CDN、A/B 测试。你会看到 Speculation Rules 条目、当前的 Prefetch/Prerender 尝试,以及任何被取消的原因(例如缺少标头、CPU 被限速、处于后台标签页等)。
可以加一个调试,只在 document.prerendering 为 true 时显示,当页面真正激活(触发 prerenderingchange)时消失。
if ("prerendering" in document) {
// 测试时的简易视觉标记
const t = document.createElement("div");
t.textContent = "(prerendered)";
t.style.cssText =
"position:fixed;inset:auto 8px 8px auto;background:#000;color:#fff;padding:4px 6px;font:12px monospace;z-index:99999;opacity:.7";
document.body.appendChild(t);
document.addEventListener("prerenderingchange", () => t.remove());
}最小可运行 Demo(6 行 HTML):
<script type="speculationrules">
{
"prerender": [{ "source": "document", "eagerness": "moderate" }]
}
</script>更细粒度控制(只对结账页启用 eager 预渲染):
<script type="speculationrules">
{
"prerender": [{
"source": "document",
"where": { "href_matches": "/checkout" },
"eagerness": "eager"
}]
}
</script>跨源页面想支持预渲染?目标服务需返回:
Supports-Loading-Mode: credentialed-prerender简单说:页面“秒开”,就等于少一个流失点。
无需新框架,无需第三方库,这是浏览器和你的一次成熟合作。
—— 但这里,本瓜友情提醒:caniuse 情况如下 - 2025.8.28

Speculation Rules API 的价值在于——它让“性能优化”变得声明化,而不是一堆事件监听和 hack。
下次有人提“再加个加载屏幕”,你只要甩出这六行代码,又一个新思路?!