以下是常用的资源预加载手段及其实现方式,帮助提升网页加载速度和用户体验:
一、HTML 原生预加载
1. <link rel="preload">
-
用途:高优先级预加载关键资源(字体、首屏图片、关键CSS/JS)
-
示例:
1
2
3
4
5<!-- 预加载字体 -->
<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin>
<!-- 预加载关键脚本 -->
<link rel="preload" href="main.js" as="script"> -
注意:
as属性必须指定资源类型(如script,style,image)- 字体文件需加
crossorigin属性
2. <link rel="dns-prefetch">
- 用途:提前解析外部域名的DNS
- 示例:
1
<link rel="dns-prefetch" href="//cdn.example.com">
3. <link rel="preconnect">
- 用途:提前建立TCP连接(DNS + TCP握手 + TLS协商)
- 示例:
1
<link rel="preconnect" href="https://api.example.com">
4. <link rel="prefetch">
- 用途:低优先级预加载后续页面可能需要的资源
- 示例:
1
2<!-- 预加载下一页内容 -->
<link rel="prefetch" href="next-page.html" as="document">
5. <link rel="prerender">
- 用途:后台预渲染整个页面(Chrome已弃用,改用
speculation-rules) - 替代方案:
1
2
3
4
5
6
7
8<script type="speculationrules">
{
"prerender": [{
"source": "list",
"urls": ["/next-page"]
}]
}
</script>
二、JavaScript 动态预加载
1. 图片预加载
1 | // 创建Image对象 |
2. 脚本/样式预加载
1 | // 动态创建link标签 |
3. 数据预加载
1 | // 使用Fetch API预取数据 |
三、HTTP/2 服务器推送
-
原理:服务器主动推送关键资源,无需等待客户端请求
-
Nginx配置示例:
1
2
3
4location / {
http2_push /styles.css;
http2_push /main.js;
} -
注意:需权衡推送资源必要性,避免浪费带宽
四、Service Worker 缓存预加载
1 | // service-worker.js |
五、性能优化最佳实践
| 场景 | 推荐方案 | 优先级控制 |
|---|---|---|
| 首屏关键CSS/JS | <link rel="preload"> |
Highest |
| 跨域CDN资源 | <link rel="preconnect"> |
High |
| 后续页面资源 | <link rel="prefetch"> |
Low |
| 动态路由数据 | fetch() + 内存缓存 |
Medium |
| 高频访问子页面 | prerender或speculation-rules |
Medium |
六、预加载策略验证工具
-
Chrome DevTools
- Network面板:查看资源加载优先级(Priority列)
- Lighthouse审计:检测未预加载的关键资源
-
WebPageTest
- 可视化瀑布流分析各资源加载时序
注意事项
- 避免过度预加载:移动端需考虑流量消耗
- 优先级管理:关键资源用
preload,非关键用prefetch - 缓存策略:预加载资源应设置合适缓存头(如
Cache-Control: max-age=3600)
通过组合使用这些预加载技术,可显著提升网页加载性能(LCP、FCP等核心指标)。建议优先优化首屏关键资源,再逐步扩展非关键资源的预加载。