在我们的网站中,我们使用外部Google字体:
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Rubik:wght@300;400;500;700&display=optional" rel="stylesheet">因此,它返回如下CSS:
@font-face {
font-family: 'Rubik';
font-style: normal;
font-weight: 300;
font-display: optional;
src: url(https://fonts.gstatic.com/s/rubik/v19/iJWKBXyIfDnIV7nMrXyi0A.woff2) format('woff2');
unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}
...当新用户第一次来到站点时,字体永远不会适用--这是我可以接受的,因为这是使用font-display: 'optional'的缺点之一。另外,我可以确认来自Google的CSS文件和字体仍然被浏览器加载并被缓存(它们只是不适用于第一次页面访问)。CSS文件缓存24小时,字体文件本身缓存1年。如果我重新加载相同的页面(Ctrl+R),则应用字体。到目前为止一切顺利。
但问题是,如果我在新Chrome选项卡(即新会话)中打开相同的页面,那么字体就不再适用了。我检查了DevTools的Network选项卡,可以确认字体是从磁盘缓存加载的。由于字体是从缓存加载的,所以我预计每次都会应用字体,直到缓存时间结束--但这是不可能的。只有当我刷新相同的Chrome选项卡时,字体才会被应用。新的会话(新选项卡)给了我没有字体的页面。
我理解了一件事:如果我做简单的页面重新加载(Ctrl+R),那么我看到字体是从内存缓存加载的,并且字体是应用的。但是新的会话(新选项卡)将导致字体从磁盘缓存加载--这可能就是它们不应用的原因。在我的开发人员机器上,我有相当快的M2 SSD磁盘,所以磁盘缓存字体不适用的原因有点奇怪。
还有一件事值得提及--我的总阻塞时间分数(CoreWebVentialTTB度量)非常糟糕。这是否是磁盘缓存字体不适用的原因?
有什么办法解决这个问题吗?
谢谢。
https://stackoverflow.com/questions/71614947
复制相似问题