pagespeed - PageSpeed Insights 不符合标准
问题描述
Google PageSpeed 建议<style>
在头部的标签中添加关键 CSS,并将外部 CSS 推迟到 HTML 的末尾。
通过在 HTML 中内联 CSS(应该分开)以及在 CSS 加载时创建 FOUC,这违反了 Web 标准。可见性可以设置为在加载 CSS 后一次性显示整个页面,但这会创建整个页面的 FOUC,看起来也不好看。
在头部使用 a 正确加载 CSS 和延迟加载 CSS 之间没有实际的时间差异<link>
,因此没有真正需要延迟加载样式表。加载页面仍然需要相同的时间。当最好只显示样式页面时,为什么要为用户提供半样式页面。
我的问题是:为什么一个网络巨头谷歌会提出如此荒谬的做法,这些做法不符合标准并造成像 FOUC 这样的加载时间问题?就像提出这些想法的人没有标准的概念一样。
解决方案
这里有一些要点可以帮助更好地理解这个概念。
通过在 HTML 中内联 CSS(应该分开),这违反了 Web 标准
将 css 规则放在文档头部的<style>
标签中是完全可以接受的,如果它用于特定目的,如您所描述的情况。在我们使用 styled-components 和 css-in-js 之类的东西的世界中,没有空间进行这种泛化(参考“这种荒谬的做法”)
以及在 CSS 加载时创建 FOUC
如果你已经准备好你的关键 css,那么每个断点的所有首屏规则都应该在那里,并且不会发生首屏 FOUC。在页面的其余部分,如果您有一个优化良好的页面,很可能没有人会设法真正看到 FOUC 的发生。它会发生得非常快并且低于可见的内容。
在头部使用 a 正确加载 CSS 和延迟加载 CSS 之间没有实际的时间差异,因此没有真正需要延迟加载样式表。
在大型项目中,css 文件不包含 10 个 css 规则和 2kb 大小。您可能有一些捆绑的 css(或多个 css 文件),其中包含数百个组件、模板和页面的样式规则,而您可能只需要一些规则来处理首屏内容。当浏览器偶然发现一个链接的 css 文件时,它会立即停止页面渲染,它会发送对特定资产的请求,并且在完成获取样式表并解析其内容之前不会继续渲染过程。这个时间很重要。这是绘制屏幕上第一个像素之前的时间。使用上述技术,您可以让浏览器在获取文档后立即开始绘制,而不会让 css 阻塞(除非您有其他阻塞资源)
加载页面仍然需要相同的时间。
- 它并不总是需要相同的数量。
- 性能优化不仅在于实际完成加载页面/资源的每一位等所需的时间。还在于您可以多快地为用户提供有用的内容(或任何内容),以及更多......
为什么网络巨头谷歌会提出如此荒谬的做法,这些做法不符合标准并造成像 FOUC 这样的加载时间问题?就像提出这些想法的人没有标准的概念一样。
我已经提到的事情应该已经回答了这个问题,所以我只想在这里给你一个建议。这种类型的公司有很多非常有才华和经验的人(他们甚至在编写网络标准和工具等方面做出了贡献)。如果您乍一看不明白,请进行进一步的研究,询问(就像您所做的那样:-)),并尝试了解您发现错误的原因。大多数情况下有人会发现,他之所以认为某些事情“荒谬”和“违反标准”,是因为他的理解不完整,而不是他们“没有标准概念”。
推荐阅读
- visual-studio - 为什么点击手势识别器在绝对布局中不起作用?
- python - 如何替换嵌套字典中的值
- c++ - 有没有一种方法可以在 CGAL 中计算 Surface_mesh 对象的 pca?
- c# - 用于将电话号码与 HTML 标签中的 Selenium 匹配的正则表达式
- wordpress - 当响应主题询问时要粘贴的内容:“粘贴您的简码、视频或图像”
- python - 如何清理此请求结果?
- c# - 字符控制问题“字符不能跳转”
- javascript - 古腾堡 InnerBlocks 的“无法读取未定义的属性 'getEditedPostAttribute'”
- sql-server - 如何从 SQL Server 导入数据以通过 adodb 连接访问
- java - Apache Beam TestStream finalPane 未按预期触发