消除阻塞渲染的资源

Lighthouse 报告的“机会”部分会列出所有阻止网页首次绘制的网址。目标是通过内嵌关键资源、延迟加载非关键资源以及移除所有未使用的内容,来减少这些会阻塞渲染的网址的影响。

Lighthouse“移除阻塞渲染的资源”审核的屏幕截图

哪些网址会被标记为阻塞渲染的资源?

Lighthouse 会标记两种类型的渲染阻塞网址:脚本和样式表。

一种 <script> 代码,用于:

  • 位于文档的 <head> 中。
  • 没有 defer 属性。
  • 没有 async 属性。

一种 <link rel="stylesheet"> 代码,用于:

  • 没有 disabled 属性。如果存在此属性,浏览器不会下载样式表。
  • 没有与用户设备完全匹配的 media 属性。media="all" 被视为会阻塞渲染。

如何识别关键资源

要减少渲染阻塞资源的影响,第一步是确定哪些资源是关键资源,哪些不是。 使用 Chrome 开发者工具中的“覆盖率”标签页来识别非关键 CSS 和 JS。 当您加载或运行网页时,该标签页会显示已使用的代码量与已加载的代码量:

Chrome 开发者工具:“覆盖率”标签页
Chrome 开发者工具:“覆盖率”标签页。

您可以通过仅提供所需的代码和样式来减小网页的大小。点击某个网址即可在“来源”面板中检查相应文件。 CSS 文件中的样式和 JavaScript 文件中的代码以两种颜色标记:

  • 绿色(关键):首次绘制所需的样式;对网页核心功能至关重要的代码。
  • 红色(非关键):适用于非立即显示的内容的样式;未在网页的核心功能中使用的代码。

如何移除阻塞渲染的脚本

确定关键代码后,请将该代码从会阻止渲染的网址移至 HTML 网页中的内嵌 script 标记。 当网页加载时,它将拥有处理网页核心功能所需的一切。

如果渲染阻塞网址中包含非关键代码,您可以将其保留在网址中,然后使用 asyncdefer 属性标记该网址(另请参阅使用 JavaScript 添加互动功能)。

应移除完全未使用的代码(请参阅移除未使用的代码)。

如何移除阻塞渲染的样式表

与在 <script> 标记中内嵌代码类似,在 HTML 页面的 head 处,在 <style> 块中内嵌首次绘制所需的关键样式。然后,使用 preload 链接异步加载其余样式(请参阅延迟加载未使用的 CSS)。

考虑使用 Critical 工具自动执行提取和内嵌“首屏内容”CSS 的流程。

消除渲染阻塞样式的另一种方法是将这些样式拆分为不同的文件,并按媒体查询进行整理。然后,为每个样式表链接添加媒体属性。 加载网页时,浏览器只会阻止首次渲染,以检索与用户设备匹配的样式表(请参阅会阻塞渲染的 CSS)。

最后,您需要压缩 CSS 以移除所有多余的空格或字符(请参阅压缩 CSS)。这样可确保您向用户发送的软件包尽可能小。

针对特定堆栈的指南

AMP

使用 AMP Optimizer 之类的工具在服务器端呈现 AMP 布局

Drupal

建议使用模块内嵌关键的 CSS 和 JavaScript,并为非关键的 CSS 或 JavaScript 使用 defer 属性。

Joomla

有很多 Joomla 插件可帮助您内嵌重要资源推迟加载不太重要的资源

WordPress

有很多 WordPress 插件可帮助您内嵌重要资源推迟加载不太重要的资源

资源