如何使用 HTML5 的 link rel="preload" 预加载资源?

推荐答案

link 标签的 rel="preload" 属性用于声明浏览器应该尽快预加载指定的资源,通常用于加载关键的资源,例如:

  • 字体文件
  • CSS 样式表
  • JavaScript 脚本
  • 图片
  • 视频

基本语法:

as 属性必须指定资源的类型,常用的类型有:

  • style:CSS 样式表
  • script:JavaScript 脚本
  • font:字体文件
  • image:图片
  • video:视频
  • fetch:通过 fetch 或 XMLHttpRequest 获取的数据
  • document:HTML 文档

crossorigin 属性用于处理跨域资源,如果需要加载跨域的资源,并且资源服务器启用了 CORS,则需要设置 crossorigin="anonymous"

示例:

本题详细解读

rel="preload" 是一种浏览器提示,告诉浏览器尽快下载并缓存指定的资源,但并不会立即执行或应用资源。这使得浏览器可以在需要时立即使用预加载的资源,从而减少加载时间,提高页面性能。

preload 的优势:

  • 提前下载: 在浏览器开始解析文档之前就开始下载资源,显著提高了加载速度。
  • 避免资源竞争: 预加载可以避免资源加载的竞争,特别是关键资源,如 CSS 和字体。
  • 更精细的控制: 通过 as 属性明确资源类型,浏览器可以更高效地处理资源。

preload 的使用场景:

  1. 关键路径 CSS: 对于首屏渲染的关键 CSS,使用 preload 可以显著加速首次绘制。
  2. 字体文件: 字体文件加载通常会阻塞渲染,使用 preload 可以避免 FOIT/FOUT 现象。
  3. 首屏需要的 JavaScript: 对于首屏渲染所需的 JavaScript 代码,也可以使用 preload
  4. 关键图片: 对于首屏的 hero 图片或者其他重要图片,提前预加载可以提高用户体验。

as 属性的重要性:

as 属性是 preload 的必要属性,它明确声明了预加载资源的类型,浏览器根据 as 属性可以:

  • 优化资源优先级: 浏览器会根据 as 属性设置资源的优先级,例如 style 的优先级高于 script
  • 缓存: 浏览器会根据 as 属性缓存资源。
  • 执行: 对于 script 类型的资源,浏览器会先下载,但不会立即执行。

跨域资源加载(crossorigin):

如果预加载的资源位于不同的域,并且资源服务器设置了 Access-Control-Allow-Origin 响应头,则需要使用 crossorigin="anonymous" 属性。这告诉浏览器使用跨域请求模式,从而确保浏览器可以正确地加载资源。

preload 的注意事项:

  • 不要过度使用: 预加载过多的资源会降低性能,应该只预加载关键资源。
  • 指定正确的 as 属性: as 属性是必需的,并且必须匹配资源的类型。
  • 使用 type 属性: 对于字体文件,使用 type 属性指定字体类型 (如 type="font/woff2")。
  • 与服务器缓存配合: preload 可以帮助浏览器更有效地缓存资源,但服务器也需要正确地设置缓存策略。
  • 监控性能: 使用浏览器开发者工具的 Performance 面板或者 Lighthouse 等工具来评估 preload 是否有效。
纠错
反馈