在前端开发中,<link> 标签的 preload 和 prefetch 属性用于优化资源加载,提升页面性能。它们的主要区别在于资源加载的时机和目的。
preload
作用
preload 用于提前加载当前页面需要的关键资源,以便在资源实际使用时能够立即可用,从而减少加载时间和延迟。
使用场景
- 关键资源:如字体、样式表、脚本、图片等,页面加载时立即需要的资源。
- 提高首屏渲染速度:确保关键资源在页面渲染时已经加载完毕,提升用户体验。
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Preload Example</title>
<link rel="preload" href="styles.css" as="style">
<link rel="preload" href="script.js" as="script">
<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin="anonymous">
</head>
<body>
<h1>Hello, World!</h1>
<script src="script.js"></script>
<link rel="stylesheet" href="styles.css">
</body>
</html>
解释
<link rel="preload" href="styles.css" as="style">:提前加载样式表styles.css,并指定资源类型为style。<link rel="preload" href="script.js" as="script">:提前加载脚本script.js,并指定资源类型为script。<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin="anonymous">:提前加载字体font.woff2,并指定资源类型为font和字体格式为font/woff2。
执行时机
preload 资源会在页面解析过程中立即开始加载,但只有在资源实际使用时才会执行。例如,预加载的脚本会在 <script src="script.js"></script> 标签解析到时执行。
prefetch
作用
prefetch 用于提前加载未来可能需要的资源,以便在用户导航到下一个页面或执行某个操作时能够快速加载资源,减少等待时间。
使用场景
- 未来可能需要的资源:如下一页的图片、脚本、样式表等。
- 提高导航速度:确保用户导航到下一个页面时,资源已经加载完毕,提升用户体验。
示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Prefetch Example</title>
<link rel="prefetch" href="next-page.html">
<link rel="prefetch" href="next-page-styles.css" as="style">
<link rel="prefetch" href="next-page-script.js" as="script">
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
解释
<link rel="prefetch" href="next-page.html">:提前加载next-page.html,以便用户导航到下一页时能够快速加载。<link rel="prefetch" href="next-page-styles.css" as="style">:提前加载下一页的样式表next-page-styles.css。<link rel="prefetch" href="next-page-script.js" as="script">:提前加载下一页的脚本next-page-script.js。
执行时机
prefetch 资源会在浏览器空闲时加载,不会阻塞当前页面的渲染。资源加载完成后会被缓存,当用户导航到下一页或执行相关操作时,资源可以立即使用。
preload 和 prefetch 的区别
| 特性 | preload | prefetch |
|---|---|---|
| 目的 | 提前加载当前页面需要的关键资源 | 提前加载未来可能需要的资源 |
| 执行时机 | 页面解析过程中立即加载,实际使用时才执行 | 浏览器空闲时加载,资源加载完成后缓存 |
| 使用场景 | 提高首屏渲染速度,减少关键资源加载时间 | 提高导航速度,减少未来页面加载时间 |
| 资源类型 | 样式表、脚本、字体、图片等 | 下一页的 HTML、样式表、脚本、图片等 |
| 对页面性能影响 | 可能会增加页面初始加载时间,但提升首屏渲染速度 | 不会影响页面初始加载时间,但可能增加带宽消耗 |
preload:用于提前加载当前页面需要的关键资源,提升首屏渲染速度。资源会在页面解析过程中立即加载,但只有在资源实际使用时才会执行。prefetch:用于提前加载未来可能需要的资源,提升导航速度。资源会在浏览器空闲时加载,并在用户导航到下一页或执行相关操作时立即可用。
通过合理使用 preload 和 prefetch,可以优化页面加载性能,提升用户体验。