一篇简单的文章,其中包含 Tomas Pustelnik 提供的一些性能数据。它很好地提醒我们,CSS 是网页性能考虑的重要组成部分,而且理由充分。
每当 [浏览器] 遇到任何外部资源(CSS、JS、图像等)时,它都会为其分配下载优先级并启动下载。优先级很重要,因为某些资源对于渲染页面至关重要(例如,主要样式表和 JS 文件),而其他资源可能不太重要(例如图像或其他媒体类型的样式表)。
对于 CSS,此优先级通常较高,因为样式表对于创建 CSSOM(CSS 对象模型)是必要的。要渲染网页,浏览器必须构建 DOM 和 CSSOM。
这就是为什么 CSS 通常被称为“阻塞”资源。在某种程度上,这是可取的:我们不希望看到未设置样式的网站闪烁。但是,当我们使 CSS 更小的时候,我们会获得真正的性能提升,因为它下载、解析和应用的速度更快。
除了文章中的技巧之外,我相信原子/全实用程序 CSS 的倡导者会很乐意指出,这些方法的样式表通常非常小,因此性能更高。CSS-in-JS 方法有时会将样式捆绑到脚本中,因此,公平地说,您通过不在那里加载 CSS 而在顶部获得了一点性能提升,但在此过程中会因增加 JavaScript 捆绑包大小而导致性能下降。(但我还没有看到一项进行公平比较的研究,所以我不确定结果是持平还是如何。)
CSS 总是阻碍我的网站显示尽可能快地渲染,但始终保持所有 CSS 最小化是好的。
每当我遇到关于如何影响 CSS 加载和应用方式和时间的文章时,我都会想到,与其对此进行调整,不如创建一个标准化的文件名用于“无论如何我们都需要的主要 CSS 文件”——让我们称之为 base.css。
如果该名称是标准化的(以及它相对于 URL/域的位置也是),那么浏览器就可以直接查找它并同时下载它,而无需等待 HTML 文档——无需等待 HTML,解析它,查找外部源并确定下载优先级,下载它们,将它们应用于文档……
因此,CSS 已经在那里或即将到来,而 HTML 仍在解析?元标记可以告诉浏览器是否将该 base.css 应用于文档或做出例外并逐文档忽略它。
坏主意吗?
是的,这将是另一个请求,如果不存在“base.css”,则可能毫无意义……可以通过协议的方式在加载 HTML 文档时完成(例如,服务器在存在时自动提供该 base.css,并且浏览器理解它)?
我们是否已经在做类似的事情,即浏览器查找 favicon.ico 以防万一,即使 HTML 头部中没有对其的引用?
每个人都对加载资源耿耿于怀。当在所有地方使用渐变和三重阴影等复杂 CSS 时,它与渲染时间相比如何?