
Next.js 16.3 刚把 Instant Navigations 和 dev 内存回收推到台前。站外还有一条更“浏览器原教旨”的路:Chrome 的 Speculation Rules。一边是框架帮你 partial prefetch 共享壳,一边是浏览器按 JSON 规则直接 prefetch / prerender 下一页。两条线常被混着吹,落地却不是一回事。
我更想谈后者:它不绑 React,适合内容站、文档站、营销站,也适合 Next 应用里“确定会点到的列表项”。用错了,你会白白烧带宽,甚至提前打到鉴权接口。
它到底预取了什么
Speculation Rules 用 <script type="speculationrules"> 塞一段 JSON。常见两档:
- prefetch:先拉下一页 HTML(及部分子资源),点击时少等一截网络。
- prerender:在隐藏上下文里接近完整渲染,点击时接近“已经打开过”。
比老的 <link rel="prerender"> 可控:可以按 eagerness、选择器、URL 模式收紧范围,也能和视口启发式配合(移动端锚点进视口后稍等再触发)。文档在 Chrome 的 prerender 指南 和 MDN Speculation Rules API。
和 Next 16.3 的 Instant Navigations 对比:框架侧偏 App Router 内部的壳共享与流式数据;Speculation Rules 偏“整页文档级”的浏览器原生投机。SPA 客户端路由主导时,你更该先看框架导航;多入口、多 HTML 文档、或跨路径硬跳转时,原生规则更直接。
一段够用的规则
列表页只预取“视口里可见、且用户可能点”的详情,比全站 prerender 靠谱:
<script type="speculationrules">
{
"prefetch": [{
"source": "document",
"where": {
"and": [
{ "href_matches": "/posts/*" },
{ "not": { "selector_matches": ".no-spec" } }
]
},
"eagerness": "moderate"
}],
"prerender": [{
"source": "document",
"where": { "selector_matches": "a.primary-cta" },
"eagerness": "conservative"
}]
}
</script>
moderate / conservative 是在赌点击概率。热门文章链、搜索结果第一条,可以更积极;后台设置页、退出登录、带一次性 token 的链接,直接加 .no-spec 或排除模式。
图:浏览器在后台悄悄“猜”下一页

和 RSC / Cookie 会话打架的地方
prerender 不是免费的。页面若在加载时:
- 写 analytics 事件;
- 刷新 CSRF;
- 扣一次“预览配额”;
- 把“已读”记进库;
那用户还没点,副作用已经发生了。内容站常见坑是把“进入详情 = 记一次 PV”写在 document 顶层。投机加载一开,列表一滚,PV 就飘。
更稳的做法:
- 真正的副作用放到
pageshow且判断event.persisted/ 文档是否来自 prerender 激活(按平台 API 检测“是否仍在投机中”)。 - 鉴权接口不要仅因为 HTML 被 prerender 就发敏感 cookie 写操作;读可以,写要等激活。
- 对个性化强的页面优先
prefetch而不是prerender,或干脆排除。
Next 里若详情是 Server Components 流式页,原生 prerender 拉到的是“该 URL 的完整文档响应”。它和 cacheComponents 的部分预取不是同一条管道。不要假设开了 16.3 Instant Navigations 就自动拥有浏览器级 prerender,反之亦然。
我怎么决定开不开
先问三个问题:
- 下一跳是否高度可预测? 文章列表 → 详情、分页 → 下一页、向导第 2 步,值得。全局导航上十个平等入口,别全 prerender。
- 预取是否会撞到计费或限流? 搜索 API、AI 摘要接口、按次计费的边缘函数,要从规则里剔除。
- 指标怎么验? 看 LCP/INP 不够。给“列表点击到详情可用”打一个 soft navigation 或自己的
performance.mark。Chrome 对投机加载有相关观测入口,但业务上更有用的是:点击后首屏字是否已经在,以及误触发率(预取次数 / 真实点击)。
实践里我常先上 prefetch + moderate,跑一周看带宽和点击命中,再对 Top 入口升 prerender。一上来全站 prerender,账单和后端 QPS 会先教你做人。
小结
Speculation Rules 把“让下一页感觉瞬间到达”从框架特性下放成浏览器能力。它不取代 Next 16.3 的 Instant Navigations,而是补了文档式多页和硬导航的那一截。规则写得越像产品漏斗(高意图链接积极,低意图保守),收益越稳。先排除副作用路径,再谈 eagerness——顺序反了,你优化的是幻影流量,不是体感。


