woshale.com
← 返回博客

网页字体加载的三个阶段

自托管网页字体不是把文件丢进服务器就完事。本站的字体加载经历了三个阶段的演进,每个阶段解决一个不同的痛点,记录下来供后来者对照。

阶段一:解决"会不会来"

最初的痛点是字体文件体积。全套中文字体动辄几十 MB,根本不可用。解法是组合拳:西文自托管(每个不到 25KB),中文回落到系统字体。文件小了,加载速度从"看运气"变成"无感"。

阶段二:解决"什么时候来"

文件小了之后出现新问题:正文先渲染了系统字体,半秒后"闪一下"换成了目标字体(FOUT)。解法两件套:

阶段三:解决"来的时候对不对"

最后是兼容细节:crossorigin 属性缺失会让预加载失效(浏览器会下载两次);多个字重共用一个 @font-face 声明会错认字重。这两坑各花掉半小时,写下来就是半个教程。

字体优化的终局不是"加载最快",而是让读者完全意识不到字体的存在——最好的性能优化都是隐形的。

验尸工具

浏览器开发者工具的 Network 面板按 Font 过滤,一眼看清每个字体文件的状态、耗时与是否被重复下载。本站现在的成绩:三个字体文件、零重复下载、首屏渲染无闪动。达标。

← 更多文章 聊聊这篇 →