javascript - 使用 Service Worker 缓存/优化字体

标签 javascript css optimization fonts service-worker

我有一个基本的 Service worker 脚本,用于缓存我的 fonts.css 文件。 service worker 正在我的 index.html 文件中的页面加载中注册,但我也在我的 index.html 中直接加载 fonts.css 文件。

Service Worker 文件将拦截请求并使用缓存的 fonts.css 文件进行响应是否正确? 还是缓存 fonts.css 文件没有效果,因为浏览器仍然需要请求列出的字体?

我相信后者是正在发生的事情,但如果有人能为我解决问题,那就太好了。缓存整个字体文件夹而不仅仅是 fonts.css 文件的最佳方法是什么?

最佳答案

Service Worker 需要缓存浏览器加载的 CSS 文件在该 CSS 文件中指定的相关字体文件(.woff2、.ttf 等)。

例如,当使用谷歌字体时 Open Sans CSS文件,各种 URL 列出了字体文件(URL 因您使用的浏览器和支持的字体类型而异)。

...

@font-face {
  src: url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWyV9hvIqOxjaPXZSk.woff2);
  src: url(https://fonts.gstatic.com/s/opensans/v15/memnYaGs126MiZpBA-UFUKWyV9hnIqOxjaPXZSk.woff2);
}
...

在此示例中,您的 Service Worker 可以缓存与域“fonts.googleapis.com”和“fonts.gstatic.com”匹配的所有文件

self.addEventListener('fetch', event => {
  if (/fonts.(googleapis|gstatic).com/.test(event.request.url)) {
    // process caching font files
  }
})

关于javascript - 使用 Service Worker 缓存/优化字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49552953/

相关文章:

javascript - 为什么这个函数在运行时会出错,但复制到控制台时不会出错?

javascript - 如何让 Jasmine 测试加载数据并以正确的顺序执行

html - 基于子图像高度的 DIV 高度在底部添加了一些额外的像素

php - Laravel 5.3 使用单个 SQL 查询和缓存需要 1.9 秒

python - 为什么两种寻找素数的算法在速度上相差如此之大,即使它们看起来迭代次数相同?

javascript - 使用 Promise 同步函数调用

javascript - 强制网站仅以横向模式显示

html - 为什么我在图像上方有额外的空间?

html - zurb 基金会中的页 footer 分高度问题

c++ - 如何检查 C++ 复制省略