Skip to content
0

字体裁剪

字体裁剪,是优化字体加载的性能,减少字体文件的下载量的一种手段

通常来说,一个全量的中文字体包,体积达到数兆甚至是十几兆,下载时间长。对用户来说体验非常不好,会看到字体闪烁一下,从一种默认的字体变为我们设置的特殊字体

因此,假设我们明确项目中会使用到的字体字形,我们就可以只针对这些字形做裁剪,让字体包中只包含我们需要的字形

过去的裁剪方法

在过去的项目中,我们会用到 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:

Released under the MIT License.