本文章更适用于解决Astro框架的问题

一般来讲,当你为自己的网站设置一个全局字体时,若部署后不经过处理难免会遇到每次跳转页面时字体闪烁的问题,原理是:客户端路由会重建文档对象模型并重新解析样式,浏览器会重新请求字体,在字体没有请求成功之前,会优先使用默认字体,请求成功后则会替代默认字体,其过程引发的闪烁

解决方法

而现在要做的是:为你的静态托管服务器添加一个配置文件,来告诉服务器自动缓存字体资源。

如果你是Vercel托管平台,请在项目的根目录新建一个vercel.json文件。

{
  "headers": [
    {
      "source": "/fonts/(.*)",
      "headers": [
        {
          "key": "Cache-Control",
          "value": "public, max-age=31536000, immutable"
        }
      ]
    }
  ]
}

如果你是Netlify托管平台,则在项目的根目录新建一个netlify.toml文件。

[[headers]]
for = "/fonts/*"
[headers.values]
Cache-Control = "public, max-age=31536000, immutable"

max-age:缓存时间(秒)

immutable:告诉浏览器这个文件永远不会变,期间完全不跟服务器通信。

public:允许 CDN、浏览器多层缓存。