字体加载太慢怎么优化?本地字体文件反而更卡了?

公孙静静 阅读 47

我用的是自定义中文字体,直接从 Google Fonts 引入特别慢,就改成把 woff2 文件下载到本地用 @font-face 引入,结果页面首次打开时文字还是空白好几秒,甚至比在线加载还卡,这是为啥?

我的写法大概是这样的:

@font-face {
  font-family: 'MyFont';
  src: url('./fonts/myfont.woff2') format('woff2');
  font-display: swap;
}
我来解答 赞 10 收藏
二维码
手机扫码查看
2 条解答
Des.增梅
你这个问题太典型了,中文字体体积太大是根本原因。

woff2 压缩过确实比 ttf 小很多,但中文字体文件本身太大了——随便一个完整的中文字体都是 2-5MB,浏览器得先把这个大家伙下载完才能显示。font-display: swap 只是让文字先用系统字体显示,等下载完再替换,但下载过程该慢还是慢。

本地加载不一定比 CDN 快,CDN 好歹有全球节点加速,你本地服务器带宽不一定够。

真正有效的做法是字体子集化,就是只保留你实际用到的字。几千个常用字和几万个生僻字差别巨大,做完子集化可能就几百 KB。

具体操作可以用 font-spider 或者 online-font-converter 这种工具,把你的文字内容(或者只取常用 3500 字)提取出来生成一个新的 woff2 文件。

另一个办法是加预加载,在 HTML head 里写:

<link rel="preload" href="./fonts/myfont.woff2" as="font" type="font/woff2" crossorigin>


这样浏览器会提前开始下载,但不保证快多少,根本还是得把文件体积降下来。

如果你的字体只是用于标题或者少量文字,用子集化效果立竿见影。如果页面到处都在用,那得考虑下是不是非用不可,或者用系统字体栈做 fallback 体验会更好。
点赞
2026-03-10 22:04
文仙(打工版)
中文字体文件动不动就几MB,你直接全量加载肯定慢。本地文件虽然不用跨域,但文件体积没变小,浏览器还得等下载完才能渲染。虽然你加了 swap,但第一次加载依然会有明显的闪烁或者等待感。

解决这事儿就两步:裁剪字体 + 预加载。

第一步,去把字体文件裁剪一下,只保留你页面里用到的字。比如你标题就几个字,没必要把整个字库都塞进去。用 font-spider 或者在线工具跑一下,文件能从 5MB 变成 50KB,速度立马起飞。

第二步,在 HTML 里加 preload,别等 CSS 解析完了才发现要加载字体。

直接用这个写法:

HTML head 里加这个:
<link rel="preload" href="./fonts/myfont.woff2" as="font" type="font/woff2" crossorigin>


CSS 保持这样就行,确保有后备字体:
@font-face {
font-family: 'MyFont';
src: url('./fonts/myfont.woff2') format('woff2');
font-display: swap;
}

body {
font-family: 'MyFont', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
}


另外检查一下服务器有没有开 Gzip 或者 Brotli 压缩,woff2 压缩后还能再小一半。别硬抗。
点赞 1
2026-03-03 21:29