字体裁剪
字体裁剪,是优化字体加载的性能,减少字体文件的下载量的一种手段
通常来说,一个全量的中文字体包,体积达到数兆甚至是十几兆,下载时间长。对用户来说体验非常不好,会看到字体闪烁一下,从一种默认的字体变为我们设置的特殊字体
因此,假设我们明确项目中会使用到的字体字形,我们就可以只针对这些字形做裁剪,让字体包中只包含我们需要的字形
过去的裁剪方法
在过去的项目中,我们会用到 aui/font-spider (字蛛)去提取项目中用到的字体
$ font-spider dest/news.html dest/index.html dest/about.html但是这种方法只能以 HTML 为入口做静态解析。在如今 SPA 的项目中,字体几乎都包含在 JS 中,动态加载而来,已不会写在 index.html 当中,所以已不再使用这种方法
fontmin
fontmin 是一个字体转换、压缩、裁剪的工具,我们可以利用它进行字体的裁剪
例如下面这个 MaShanZheng-Regular 字体,原体积是 5 M 多
下面是使用 fontmin 裁剪的代码,我们仅保留了「天地玄黄 宇宙洪荒」这几个字的字形:
import Fontmin from 'Fontmin'
const fontmin = new Fontmin()
.src('./MaShanZheng-Regular.ttf')
.use(Fontmin.glyph({
text: '天地玄黄 宇宙洪荒',
hinting: false
}))
.dest('./build'); // 输出路径
fontmin.runAsync()经过裁剪之后,体积缩小到了 7.97 KB: