Post by account_disabled on Dec 12, 2023 5:10:30 GMT
即使到了 2021 年,网络性能仍然是一个问题。根据 HTTP Archive 的数据,平均页面需要2MB 下载,发出 60 多个 HTTP 请求,并且在移动设备上完全加载可能需要18 秒。样式表代表 60kB,分为七个请求,因此在尝试解决性能问题时它们很少是重中之重。 然而,CSS 确实有影响,无论它看起来多么微小。一旦你解决了JavaScript问题,学习如何正确优化 CSS 应该是你的首要任务。 让我们来谈谈! CSS 如何影响页面性能 CSS 看起来很简单,但可能需要大量处理。 CSS 块渲染 当您的浏览器遇到标签时,<link>它会停止其他下载和浏览器处理,同时检索和解析 CSS 文件。 JavaScript 也可以阻止浏览器渲染,但异步处理是可能的,这要归功于: async并行下载脚本的属性,准备就绪后立即运行。 defer并行下载的属性,然后在 DOM 准备好时按顺序运行。 用于加载 ES 模块的属性type="module"(其行为类似于defer)。 图像等资源通常需要更多带宽,但可以使用高效的格式,并且可以延迟加载(属性loading="lazy")而不会阻止浏览器渲染。 这一切对于 CSS 来说都是不可能的。文件被缓存,因此后续页面加载应该更快,但渲染阻塞过程仍然存在。
处理大型 CSS 文件需要时间 样式表越大,下载并将其处理为 CSSOM(CSS 对象模型)所需的时间就越长,浏览 电话号码清单 器和 JavaScript API 可以使用它来显示页面。尽管 CSS 样式表比大多数其他 Web 文件小,但它们也不能免受“越小越好”的经验法则的影响。 CSS 文件增长 识别不再使用的样式可能很困难,并且删除错误的样式可能会对网站造成严重破坏。那些从事开发工作的人通常会选择更安全的“保留一切”方法。不再使用的页面样式、组件和小部件继续存在于 CSS 中。结果?文件大小、复杂性和维护工作呈指数级增长,这意味着开发专业人员不太愿意删除冗余代码。 样式表可以引用其他资源 由于 @import 规则,CSS 可以引用其他样式表。这些导入会阻止当前样式表的处理并批量加载其他 CSS 文件。 还可以参考其他资源,例如字体和图像。浏览器将尝试优化下载,但如果有疑问,它将立即恢复它们。Base64 编码的文件会经过进一步的处理。 渲染 CSS 效果 浏览器具有三个渲染阶段: 布局(或回流)阶段计算每个元素的大小以及它如何影响其周围元素的大小或位置。 绘制阶段在不同的图层上绘制每个元素的视觉部分:文本、颜色、图像、边框、阴影等。
合成根据堆叠、定位、z-index 等上下文以正确的顺序在页面上绘制每个图层。 如果您不小心,CSS 属性更改和动画可能会导致所有三个阶段重新渲染。某些属性(例如阴影和渐变)的计算成本也比块颜色和边缘颜色更高。 CSS 性能分析工具 承认你有 CSS 性能问题是恢复之路的第一步!查找并解决原因是另一回事。 以下工具和服务(未按任何特定顺序排名)可以帮助您识别代码中的样式瓶颈。 1. DevTools 中的网络面板 Web 性能专家在DevTools ,特别是网络面板上花费了大量时间。DevTools 是大多数现代浏览器的原生工具,但我们将使用 Google Chrome 作为示例。 DevTools 可以从浏览器菜单打开,通常是从“更多工具” > “开发工具”,或通过键盘快捷键Ctrl | Cmd + Shift + I或F12。 转到网络选项卡并确保选中禁用缓存选项以防止缓存文件影响报告。您还可以更改限制选项以模拟较慢的移动网络。 刷新页面即可看到下载和处理瀑布图: 开发者工具网络面板 开发者工具网络面板 图表上的任何长条都值得关注,但您应该特别关注停滞或停滞的长条(以白色显示)。在此示例中,突出显示的行及其后面的所有行只有在 HTML 页面顶部处理了渲染阻止 CSS 和 JavaScript 文件后才能开始下载。 过滤器框允许您显示或隐藏特定资源: larger-than:<S>:限制大于<S>的文件,以字节 (10,000)、千字节 (1,000 kB) 或兆字节 (1 M) 表示。
处理大型 CSS 文件需要时间 样式表越大,下载并将其处理为 CSSOM(CSS 对象模型)所需的时间就越长,浏览 电话号码清单 器和 JavaScript API 可以使用它来显示页面。尽管 CSS 样式表比大多数其他 Web 文件小,但它们也不能免受“越小越好”的经验法则的影响。 CSS 文件增长 识别不再使用的样式可能很困难,并且删除错误的样式可能会对网站造成严重破坏。那些从事开发工作的人通常会选择更安全的“保留一切”方法。不再使用的页面样式、组件和小部件继续存在于 CSS 中。结果?文件大小、复杂性和维护工作呈指数级增长,这意味着开发专业人员不太愿意删除冗余代码。 样式表可以引用其他资源 由于 @import 规则,CSS 可以引用其他样式表。这些导入会阻止当前样式表的处理并批量加载其他 CSS 文件。 还可以参考其他资源,例如字体和图像。浏览器将尝试优化下载,但如果有疑问,它将立即恢复它们。Base64 编码的文件会经过进一步的处理。 渲染 CSS 效果 浏览器具有三个渲染阶段: 布局(或回流)阶段计算每个元素的大小以及它如何影响其周围元素的大小或位置。 绘制阶段在不同的图层上绘制每个元素的视觉部分:文本、颜色、图像、边框、阴影等。
合成根据堆叠、定位、z-index 等上下文以正确的顺序在页面上绘制每个图层。 如果您不小心,CSS 属性更改和动画可能会导致所有三个阶段重新渲染。某些属性(例如阴影和渐变)的计算成本也比块颜色和边缘颜色更高。 CSS 性能分析工具 承认你有 CSS 性能问题是恢复之路的第一步!查找并解决原因是另一回事。 以下工具和服务(未按任何特定顺序排名)可以帮助您识别代码中的样式瓶颈。 1. DevTools 中的网络面板 Web 性能专家在DevTools ,特别是网络面板上花费了大量时间。DevTools 是大多数现代浏览器的原生工具,但我们将使用 Google Chrome 作为示例。 DevTools 可以从浏览器菜单打开,通常是从“更多工具” > “开发工具”,或通过键盘快捷键Ctrl | Cmd + Shift + I或F12。 转到网络选项卡并确保选中禁用缓存选项以防止缓存文件影响报告。您还可以更改限制选项以模拟较慢的移动网络。 刷新页面即可看到下载和处理瀑布图: 开发者工具网络面板 开发者工具网络面板 图表上的任何长条都值得关注,但您应该特别关注停滞或停滞的长条(以白色显示)。在此示例中,突出显示的行及其后面的所有行只有在 HTML 页面顶部处理了渲染阻止 CSS 和 JavaScript 文件后才能开始下载。 过滤器框允许您显示或隐藏特定资源: larger-than:<S>:限制大于<S>的文件,以字节 (10,000)、千字节 (1,000 kB) 或兆字节 (1 M) 表示。