Prerender2.0通过Speculation Rules API预渲染详情页,实现新闻列表点击后正文“瞬间呈现”;需检查浏览器支持、配置响应头、内联声明规则、优化页面逻辑并做好监测降级。

要让新闻列表点击后正文“瞬间呈现”,关键不是等用户点完再加载,而是提前把可能打开的正文页面准备好——Prerender2.0 正是为此设计的。它比旧版更轻、更准、更可控,适合新闻类场景中“列表→详情”的高频跳转路径。
确认浏览器支持并启用 speculationrules
Prerender2.0 不再用老旧的 <link rel="prerender">,而是统一通过 Speculation Rules API 声明预加载策略。需先检查支持性:
- 在 JavaScript 中运行:
HTMLScriptElement.supports('speculationrules'),返回true表示可用(Chromium M94+,即 Chrome 110+ / Edge 110+) - 确保服务端响应头包含
Vary: Sec-Purpose(部分 CDN 或 Nginx 需手动配置)
在新闻列表页声明预渲染规则
将以下 JSON 脚本放在 <head> 中(注意:必须是内联 <script type="speculationrules">,不能外链):
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
{
"prerender": [
{
"source": "list",
"urls": [
"/article/123",
"/article/456",
"/article/789"
]
}
]
}
-
"source": "list"表示这些 URL 来自当前页面的新闻列表(语义化标记,非强制但推荐) - URL 应为真实、可访问的详情页地址,且与当前域名同源;跨域或带敏感参数(如 token)的链接不会被 prerender
- 建议限制数量(如最多 3–5 条),避免资源争抢;可结合 Intersection Observer 动态更新 rules
优化详情页以适配 Prerender2.0
预渲染页面若含重逻辑或副作用,可能失败或白屏。需针对性精简:
立即学习“前端免费学习笔记(深入)”;
- 移除或延迟执行非必要 JS:如第三方统计、广告 SDK、自动播放视频,改用
document.prerendering === false判断后再初始化 - 服务端返回的 HTML 应尽量静态;动态数据(如阅读数、评论数)留到激活后用 Fetch 补充
- 避免在
<body>加载时调用alert()、prompt()或访问window.top.location等阻断行为 - 使用
<link rel="prefetch" as="image">单独预取大图,减轻 prerender 主体负担
监测与降级保障
Prerender 并非 100% 成功,需有 fallback 和可观测手段:
- 监听生命周期事件:
document.addEventListener('prerenderingchange', () => { console.log('prerendering:', document.prerendering); }); - 在详情页 JS 中检查
performance.getEntriesByType('navigation')[0]?.activationStart > 0,判断是否由 prerender 激活 - 未支持时,保持原有跳转逻辑(
<a href="/article/123">),用户无感知;可搭配 NoState Prefetch 作为次优方案


















