【发布时间】:2018-11-22 06:22:11
【问题描述】:
Light House 审核建议我预加载关键请求,特别是我在 React 应用程序中使用的两种谷歌字体。灯塔成员建议使用:
<link rel="preload" as="style" href="https://fonts.googleapis.com/css?family=Open+Sans|Roboto:700" crossorigin>
<link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin>
我知道它正在发出请求,因为我在瀑布中看到它并收到以下控制台警告:
“资源 https://fonts.googleapis.com/css?family=Open+Sans|Roboto:700 已使用链接预加载进行预加载,但在窗口加载事件后的几秒钟内未使用。请确保它具有适当的 as 值并且是有意预加载的。”
不幸的是,这两种字体不再显示在我的应用程序中。我需要用@font-face 或类似的东西在我的CSS 中定义这些吗?
【问题讨论】:
-
我看不到您的代码,但我猜您将
<link rel="stylesheet">替换为<link rel="preload">。这还不够。preload和stylesheet两者都需要。 -
这样吗? fonts.googleapis.com/css?family=Open+Sans|Roboto:700" crossorigin>
-
还没有。您不应该将这些标签合并为一个,而是保留两者。最终,每种字体都会有两个
<link>标记。一个preload,一个stylesheet。 -
这有效:fonts.gstatic.com" crossorigin> fonts.googleapis.com/css?family=Roboto:700" crossorigin> fonts.googleapis.com/css?family=Open+Sans" crossorigin> fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet" crossorigin> fonts.googleapis.com/css?family=Roboto:700" rel="stylesheet" crossorigin >
-
在不添加 crossorgin 属性的情况下,我收到了来自 LightHouse 的渲染阻止样式表警告,但是,按照 Chrome 的建议预加载字体的整个努力将我的第一个有意义的绘制从 2650 毫秒提高到 3620 毫秒,并降低了我的灯塔分数88 到 79。
标签: javascript html css reactjs lighthouse