skip to content
usubeni fantasy logo Usubeni Fantasy

CJK 字体文件压缩方案

/ 2 min read

主方案

人生苦短,我用 python

主方案我们用 python 的 fonttools 解决问题。

genSubset.sh
#!/bin/bash
fonttools subset "./src/assets/fonts/font.woff2" --text-file="./subset.txt" --output-file="./src/assets/fonts/subset-font.woff2"
fonttools ttLib.woff2 compress "./src/assets/fonts/subset-font.woff2" -o "./src/assets/fonts/min-subset-font.woff2"
rm -rf ./src/assets/fonts/subset-font.woff2

subset.txt 就是一个常用汉字子集,例子可以看这个 gist

操作

  • 安装 python3
  • pip3 install fonttools
  • pip3 install brotli(压缩功能会用到)
  • 运行 genSubset.sh
  • 完结撒花,十分简单
  • 遇到反馈说某个字字体丢失,只要在 subset.txt 添加该字再重复以上步骤即可

如果你还是不想用 python,坚持 Node 的话,以下提供两个方案供参考。

方案 2:字蛛

当然,其实把所有常见汉字包进去其实是一种偷懒,但是不能否认这是十分高效的做法。

把字体文件极致压缩到只包含你的网站使用到字也是可能的,甚至在现在还简单一点,因为 SSR 又起来了(如果是 SSG,那就更是简单),以前 SPA CSR 是真的不方便。

这样的极致压缩方案其实早就有了,那就是八年前的“远古”项目字蛛。可惜现在的 Node 应该是不能正常运行了,得故意为压缩字体 nvm 一下。

方案 3:fontkit

其实用 py 主方案的时候我就觉得,这样的操作在 Node 应该也有替代方案,今天找了找,大概 fontkit 也是可行的。(没有实际使用过,仅提供信息)

评论组件加载中……