我见过一种特定的模式[用于加载非关键 CSS],即预加载/polyfill 模式。使用这种方法,您会将所有样式表加载为预加载,然后使用它们的
onload
事件,在浏览器准备好后将它们更改回样式表。
因此,您试图使样式表更异步,但这会导致两个主要问题
- 您已将下载的优先级提高到高于任何其他资产。
- 您也阻止了 HTML 解析器(因为 polyfill 作为内联脚本)。
Firefox 在这种特定情况下做了一些巧妙的事情来避免问题 #2,但这会影响所有其他浏览器。
我对使用花哨的技术来欺骗浏览器以获得理论上更好的下载/渲染模式从未有过好运气。我有点喜欢将样式表放在头部,将脚本放在主体末尾的那种人,但我知道网络是一个复杂的地方。事实上,快速浏览一下,我发现 Jetpack 将内联脚本插入到我的<head>
中,因此这也会影响我的加载,除非他们使用模糊的type
加载它,直到以后的脚本执行并更改它,可能就是为了避免这个问题。
无论如何,Tim 的建议
• 如果您正在使用 loadCSS 和预加载/polyfill 模式,请改用
• 如果您有任何正常加载的外部样式表(即,作为常规样式表链接),请将所有可以在标记中找到的内联脚本都移动到它上面
• 内联您的关键 CSS 以获得尽可能快的初始渲染时间。
打印模式为
<link rel="stylesheet" href="/path/to/my.css" media="print" onload="this.media='all'">