gpt4 book ai didi

html - 为主页和预取内联整个 CSS 文件

转载 作者:行者123 更新时间:2023-11-28 15:55:41 25 4
gpt4 key购买 nike

背景

我们正在尝试将 CSS 内联到站点的 <head> 中减少页面加载时间。因为我们使用的 CMS 允许非常灵活的内容管理,所以只内联“关键”CSS 不是一种选择,因为我们无法在编译时知道将/不会使用什么标记(因此显示在“上方”折叠')在以后的日期。

因此,我们正在研究内联 main.css全部 内容的选项。文件进入主页<head>然后预取 main.css以便当用户导航到站点上的另一个页面时,它可以在缓存中使用。

这将减少网站最常见入口点的页面加载时间,同时仍会为任何后续页面访问缓存 CSS。

问题

我想我有几个问题,但感觉它们有内在联系,所以我想把它们都包括在这里,而不是将它们分成单独的 SO 问题。

  1. 内联 main.css 的全部内容有什么缺点吗?进入首页<head> ?我主要关心的是文件大小,但是当 gzip 压缩时,有/没有内联 CSS 的差异非常小,而且无论哪种方式,样式都必须在某个时候下载,无论是在 html 文件还是 CSS 文件中。

  2. 什么时候是预取实际文件的最佳时机?实际上,考虑的是预取是否会在解析时触发对服务器的同步请求,这将计入并行连接的限制,从而可能阻止其他请求。如果是这样,我猜 <link>应该位于文档的底部,或者异步写入 DOM。如果不是,我认为住在 <link rel="stylesheet"> 的地方最有意义。本来是,在<head> .

最佳答案

tl;dr:

转换 main.css进入base64并添加到 <head>的主页。然后为main.css添加预取链接 就在正文关闭标签之前 </body>


这个答案可能有点非正统但是,这里是。

是的,你完全可以按照你描述的去做;但是,您将在主页上下载 CSS 两次。

注意事项:

  • 只有当您的 CSS 文件写得很好并且不重时,这才会有效。
  • 维护 CSS 很痛苦 因为你会必须为您想要的每个小更改重复整个过程制作您的样式表

还有兴趣吗? 好的

  1. 完成您的 main.css文件
  2. 压缩和优化 css使用任何 css 的内容清洁工具
  3. 保存 main.css 的副本在某处归档
  4. 转换 main.css归档到base64
  5. 保存 base64字符串
  6. 将以下内容添加到 <head>你的文件

    <link rel="stylesheet" type="text/css" href="data:text/css;base64,###" />
  7. 添加base64 main.css 的字符串文件代替 "###" 在上面代码结束


这包括内联 CSS在你的主页上。

如果您正确执行此操作,

您将能够加载整个 css主页 无需任何额外请求它将成为主页的一部分 html

考虑因素:

  • 这 block CSS 不会被浏览器缓存 除非你服务器配置为提供缓存的 html 页面

    只有这样它才会被缓存为 html 的一部分用于主页。

  • 它只会为主页缓存。 这个CSS block 是无用的对于任何后续页面


现在,对于后续页面

  1. 找到 main.css服务器上的文件
  2. 添加 rel="prefetch"链接 - 在您主页的最底部 - 链接到该文件。

主页的 html 应该是这样的:

<head>
<link rel="stylesheet" type="text/css" href="data:text/css;base64,###" />
/* stuff */
</head>
<body>
/* stuff */
<link rel="prefetch" href="main.css">
</body>

结论:

如果操作正确;浏览器将:

  1. 访问您的主页
  2. 处理内联css用于主页。
  3. 处理您主页的内容并完整呈现
  4. Prefetch 可缓存 css文件后续页面

奖励:

您可以更进一步,将您拥有的任何字体文件更改为 base64然后将它们内联到 main.css 中文件,然后将其转换为 base64

这将进一步减少请求的数量。

考虑因素:

  • 并非所有浏览器都支持现代字体文件。
  • 内联相同字体的不同格式以用于不同的浏览器 - (ttf + woff + svg) 等... - 将不起作用,因为它们将全部下载,而不是根据浏览器功能向他们提供服务
  • 我使用这种方法并提供 .woff只有它几乎得到了支持93% 的浏览器根据 Can I Use

最后的话:

  • 确保您的服务器使用 Gzip
  • 确保您的 main.css文件被缩小

关于html - 为主页和预取内联整个 CSS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41188917/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com