我正在尝试优化这个网站:electronicsportsitalia-it,当我试图分析它在谷歌PageSpeed平台上说,有一个谷歌字体阻止页面渲染:
https://fonts.googleapis.com/css?family=Lato:300,400,700
字体最初是通过php加载的,但后来我直接将其插入HTML代码中,尝试使用以下代码加载:<link rel=stylesheet id=avia-google-webfont href='//fonts.googleapis.com/css?family=Lato:300,400,700' type='text/css' media=all lazyload>
-我也在</body>
标签前面放了-但是没有用。
所以我试着用Web Font Loader加载它,实际上,网站正在运行这个脚本:'
</script>
<script>
WebFont.load({
google: {
families: ['Lato']
}
});
</script>`
但在PageSpeed上总是同样的问题。
有人能帮帮我吗?
6条答案
按热度按时间qnakjoqk1#
你可以预加载任何样式(包括google字体)
您可以在www.example.com上阅读更多信息web.dev
更新
基于Lucas Vazquez注解,我还添加了
&display=swap
(它修复了"Ensure text remains visible during webfont load"的这个问题)vdzxcuhz2#
你的问题归结为如何异步地包含不太重要的CSS。我推荐阅读这篇article。
它类似于Claudiu的answer,但是,本文建议不要使用
preload
,因为:首先,浏览器对preload的支持还不是很好,所以如果你想依靠polyfill(比如loadCSS提供的)来获取和应用一个跨浏览器的样式表,那么polyfill是必要的,更重要的是,preload会很早地获取文件,具有最高的优先级,可能会降低其他重要下载的优先级,这可能比你实际需要的非关键CSS的优先级要高
以下是替代方案:
这是它的工作原理。属性
media=print
将跳过页面渲染的css。一旦页面加载,它将加载打印css。onload JS事件将media更改为all,现在字体将被加载并更改页面渲染。最重要的是,字体将不再阻止页面渲染。对于用户禁用js的极端情况,“noscript”标记将直接加载字体。
9lowa7mx3#
你可以像这样利用onload属性-
首先将media属性设置为
print
,但在触发下载回调时将其更改为all
。pcrecxhr4#
我注意到Laravel最近在其html head输出中添加了以下标记:
我复制它,并添加它之前,我的字体请求,即:
这个简单的标签让我的移动的页面速度得分从80上升到95,但我不能完全确定这是不是我得分上升的原因--页面速度是不可预测的。我不确定这是Chrome的东西还是一个新标准。
w51jfk4q5#
在我的例子中,我会使用font-face generator tool来生成字体,这更容易使用,也更少麻烦,但当我使用谷歌字体时,这就是我所做的。你可以在
body
的末尾使用style
元素,就在</body>
结束标记之前:也可以引用How to keep CSS from render-blocking my website?
zy1mlcev6#
必须在加载此JS文件之前加载以下字体文件:
https://electronicsportsitalia.it/wp-content/plugins/google-analytics-for-wordpress/assets/js/frontend.min.js