资源预加载提示生成器

本地处理
  • 打赏支持
  • 分享链接
  • 反馈建议
资源提示是"用一行 HTML 换几百毫秒"的手段。preconnect 提前建立 TCP+TLS,preload 提前下载关键资源,两者配合能明显改善 LCP。
-
dns-prefetch
-
preconnect
-
preload
-
标签总数
-
每个第三方域名生成 1 条 dns-prefetch + 1 条 preconnect;每个关键资源生成 1 条 preload,并根据 as 类型自动补充 crossorigin 属性。

四种提示的区别

标签做什么开销使用场景
dns-prefetch只做 DNS 解析极低所有会用到的第三方域名
preconnectDNS + TCP + TLS 握手中(占用连接)确定会用、且延迟高的关键域名
preload提前下载当前页面要用的资源高(占带宽)LCP 图片、首屏字体、关键 CSS
prefetch空闲时预取后续页面资源低(低优先级)下一步可能访问的页面

关键区别在于 preload 是"现在就下载",会和其他关键资源抢带宽;prefetch 是"闲着再下载",优先级最低。用错的话,preload 反而会拖慢首屏。

preconnect 别滥用

每个 preconnect 都要建立一个完整的连接(DNS + TCP + TLS),而这个握手本身要消耗时间与资源。经验规则是:

  • 同一页面 最多 3–4 个 preconnect。多了会适得其反,浏览器需要排队建立连接。
  • 对确定会用的域名用 preconnect;只是"可能会用"的用 dns-prefetch 就够了——DNS 解析成本低,浪费了也无妨。
  • 同一域名不要同时写 dns-prefetch 和 preconnect。preconnect 已经包含 DNS 解析,重复声明是浪费(虽然无害)。

字体的 crossorigin 是必须的

这是最常见的 preload 失效原因:网页字体请求默认使用 CORS 匿名模式,如果 preload 时不加 crossorigin,浏览器会把它当成两个不同的请求,导致字体被下载两次——不仅没提速,还多了一次请求。

<link rel="preload" href="/fonts/main.woff2" as="font" type="font/woff2" crossorigin>

注意 crossorigin 即使是同源字体也要加,这是标准规定。同样需要注意 as 属性必须准确,写错等于 preload 无效。

什么该 preload

值得 preload不要 preload
LCP 元素(首屏大图、主标题字体)首屏之外的任何图片
首屏内联关键 CSS 引用的字体整个 CSS 文件(会阻塞渲染)
折叠上方必需的背景图视频、大体积媒体文件
关键 JS(水合入口)懒加载模块

原则很简单:preload 只给"少了它首屏就出不来"的资源。判断方法是打开发者工具的 Network 面板,看瀑布图里哪些资源处于关键路径上。

你可能还想问

预加载提示有什么用?

提前告诉浏览器关键资源的位置与优先级,缩短关键路径的等待;用错反而会抢占带宽,拖慢真正重要的资源。

该预加载哪些资源?

只预加载首屏必需的字体、关键样式与图片;范围过宽会与正常加载竞争,效果适得其反。

和缓存策略怎么配合?

提示只是提前发起请求,缓存仍靠响应头控制;两者配合才能既早开始又避免重复下载。