HTML5 中通过 Resource Hints 实现页面预加载的核心方法是利用 <link> 标签的 rel 属性,结合 dns-prefetch、preconnect、prefetch 和 preload 四种类型,提示浏览器提前处理资源以优化加载性能。 以下是具体用法和注意事项:
1. dns-prefetch(DNS 预解析)- 作用:提前解析外部域名的 DNS,减少后续请求的延迟。
- 适用场景:页面中引用了第三方资源(如 CDN、字体、广告等)。
- 代码示例:<!-- 预解析 Google Fonts 的 DNS --><link rel="dns-prefetch" href="//fonts.googleapis.com"><!-- 预解析 CDN 的 DNS --><link rel="dns-prefetch" href="//cdnjs.cloudflare.com">
- 注意事项:仅解析 DNS,不建立连接,适合低优先级资源。
2. preconnect(预连接)- 作用:在 dns-prefetch 基础上,进一步建立 TCP 连接并完成 TLS 握手,减少跨域请求的延迟。
- 适用场景:确定要访问的跨域服务器(如 API 接口、字体服务)。
- 代码示例:<!-- 预连接 API 服务器 --><link rel="preconnect" href="
https://api.example.com"><
!-- 预连接字体服务(需配合 crossorigin 使用) --><link rel="preconnect" href="https://fonts.gstatic.com"
crossorigin> - 注意事项:
避免滥用,过多预连接会占用浏览器资源。
字体预连接需添加 crossorigin 属性,否则可能重复请求。
3. prefetch(资源预获取)- 作用:提示浏览器在空闲时预先加载用户可能访问的下一个页面的资源(如 HTML、JS、CSS)。
- 适用场景:预测用户导航路径或预加载关键静态资源。
- 代码示例:<!-- 预加载下一页的 HTML --><link rel="prefetch" href="/next-page.html"><!-- 预加载关键 JS --><link rel="prefetch" href="/js/main.js">
- 注意事项:
浏览器通常在页面加载完成后利用空闲时间下载资源。
适合低优先级资源,避免与首屏关键资源竞争带宽。
4. preload(关键资源预加载)使用建议与优化策略- 优先级排序:
首屏关键资源:优先使用 preload。
跨域第三方资源:使用 preconnect 或 dns-prefetch。
后续页面资源:使用 prefetch。
- 避免滥用:
过多 preconnect 或 preload 会占用带宽和连接资源,需根据实际需求选择。
- 字体预加载:
字体文件需添加 crossorigin 属性,否则可能因 CORS 策略导致重复请求。
- 移动端优化:
在弱网环境下,合理使用 Resource Hints 可显著提升加载速度。
示例代码整合<!DOCTYPE html><html lang="en"><head> <!-- DNS 预解析 --> <link rel="dns-prefetch" href="//fonts.googleapis.com"> <link rel="dns-prefetch" href="//cdnjs.cloudflare.com"> <!-- 预连接跨域服务器 --> <link rel="preconnect" href="https://api.example.com">
<link rel="preconnect" href="https://fonts.gstatic.com"
crossorigin> <!-- 预加载关键资源 --> <link rel="preload" href="critical.css" as="style"> <link rel="preload" href="app.js" as="script"> <link rel="preload" href="hero-image.jpg" as="image"> <link rel="preload" href="/fonts/myfont.woff2" as="font" type="font/woff2" crossorigin> <!-- 预获取下一页资源 --> <link rel="prefetch" href="/next-page.html"></head><body> <!-- 页面内容 --></body></html>通过合理使用 Resource Hints,可以显著提升页面加载性能,尤其在资源较多或网络较慢的情况下效果更明显。掌握其使用时机和场景,能让页面加载更流畅。