预渲染 (Prerender) 是一种在后台预先完成页面渲染 (HTML 解析、CSS 应用、JavaScript 执行) 的优化技术,针对用户可能即将访问的页面提前处理。当用户实际点击链接时,已渲染完成的页面会直接呈现,几乎没有等待时间。不过预渲染只是给浏览器的提示,浏览器可能因内存状况或用户设置而不予执行。
Chrome 通过 Speculation Rules API 支持预渲染功能。在 HTML 中编写 <script type="speculationrules"> 标签,指定预渲染目标的 URL 模式,目标链接由站点自行声明,而非依赖浏览器预测,触发时机通过 eagerness 指定。immediate 在读取规则时立即执行,eager 与 moderate 在指针停留于链接上时执行,conservative 在指针按下时执行,其中 eagerness 的指定自 Chrome 121 起可用。
在短链接的场景下,首先需要确认预渲染能够覆盖的范围。通常点击短链接后需要经历 DNS 解析、TCP 连接、重定向响应、目标页 DNS 解析、页面加载等多个步骤。但 Speculation Rules API 的预渲染默认仅面向同源文档,源不同时也只有在同一站点内且目标页通过 Supports-Loading-Mode 请求头表示接受的情况下才可行。跨站点的预渲染不会执行,正在预渲染的页面一旦尝试跳转到其他站点,该预渲染会在请求发出前被丢弃。短链接往往与所在页面和目标页分属不同站点,因此无法用预渲染提前完成上述步骤。其适用范围主要是站内跳转,若希望加快跳往外部站点的重定向,可考虑后文提到的更轻量的手段。
预渲染的注意事项包括资源消耗问题。预渲染会在后台加载完整页面,消耗用户的网络带宽和设备内存。在移动环境下,数据流量的增加可能成为问题,因此应仅对高确定性的链接启用预渲染。Chrome 还限制同时保留的预渲染数量,immediate 最多 10 个,其他 eagerness 最多 2 个,超出后会从最早的开始丢弃。此外在指定 Save-Data、开启省电模式、内存不足或浏览器关闭页面预加载设置时,投机加载本身不会执行。
预渲染的渐进替代方案包括 dns-prefetch (仅 DNS 解析)、preconnect (DNS + TCP + TLS) 和 prefetch (仅下载资源),可根据资源消耗与效果的平衡灵活选用。这三者对跨源同样有效,因此对于导向外部站点的链接比预渲染更为现实。另外,早期使用的 <link rel="prerender"> 已被弃用,在当前 Chrome 中不再进行整页预渲染,其行为接近资源预取。页面级别的预读已由 Speculation Rules API 承接。