一般规则是尽可能少地发送 - 为什么要发送不必要的数据并浪费下载时间和带宽?因此,如果您可以仅将 1kb 的关键 css 内联,那么就这样做,如果您需要 5kb,那么就这样做。包含完整的 15kb 的主要原因是避免找出关键或必要的 css 的复杂性,但您似乎已经解决了这个问题。
有些人还争论将第一次绘制的关键数据(包括内联的 css 和 HTML)保留在页面的前 14kb 中——这是由于 TCP 的工作方式以及它最初可以发送 10 个数据包而不预期任何数据包的事实承认。因此,任何大于 14kb 的内容都需要确认,因此需要往返和延迟。在此之后,TCP 在需要确认之前可以发送的数量(CWND)呈指数增长,但开始时很小。就我个人而言,我不再相信 14kb 数字是正确的。SSL/TLS 协商(假设您使用的是 HTTPS)占用了其中的一些 14kb,还需要往返,然后 HTTP/2(再次假设您正在使用)需要更多的 kbs 和往返来发送初始消息,所有之前发送和接收您的 HTTP 请求。因此,当这一切发生时,窗口大小要么是 14kb 的一小部分,要么已经成倍增长到更大的大小。尽管如此,保持它尽可能小以允许更多页面更快下载的一般原则仍然有效 - 只是不一定要关注那个 14kb 数字。
是否选择内联 CSS 完全取决于您。速度提升令人印象深刻,您说得对,第一页浏览量通常更重要,但也有缺点,包括它需要一个构建步骤来确定要包含的 CSS,然后再包含它,事实是重复的跨页面的数据,事实上,如果您更改 CSS(而不是仅仅发布 CSS 文件),您可能需要发布所有内联的网页......等等。就个人而言,除非您是一个超级繁忙和超级优化的网站(例如 Google 主页),我认为增加的复杂性是不值得的。我的更多想法在这里:https ://www.tunetheweb.com/blog/inlining-css-is-not-for-me/
这在 HTTP/2 下会改变吗?好吧,是的,不是的。从理论上讲,HTTP/2 的多路复用意味着多个请求可以同时进行,因此您无需启动另一个连接来请求 CSS,因此您可能根本不需要内联。但是,这仍然需要在获取 HTML 后来回请求 CSS,因此不如内联快,即使它比 HTTP/1.1 更快(您需要等待 HTML 完全完成下载以允许连接到用于 CSS 请求,或使用 TCP 和 HTTPS 延迟启动另一个连接)。
HTTP/2 Push 应该解决这个问题 - 将 CSS 作为单独的文件保存,但是当请求 HTML 时,用 HTML 文件和 CSS 文件回复(推送 CSS 文件)。没有往返延迟,仍然是一个单独的 CSS 文件 - 两全其美。与以往一样,现实有点棘手。主要问题是如何避免为任何后续页面再次推送 CSS(与内联具有相同的缺点)。有多种方法可以做到这一点,但基于cookie 的实现可能是目前最好和最实用的。即使这样,还有其他复杂性和错误需要考虑。因此,HTTP/2 推送未能真正成为内联替代品。