连字等宽字体能压到多小?Maple Mono WOFF2 压缩实战指南
【免费下载链接】maple-fontMaple Mono: Open source monospace font with round corner, ligatures and Nerd-Font icons for IDE and terminal, fine-grained customization options. 带连字和控制台图标的圆角等宽字体,中英文宽度完美2:1,细粒度的自定义选项项目地址: https://gitcode.com/GitHub_Trending/ma/maple-font
414 KB 的变量字体文件,经 WOFF2 封装后变成 128 KB——实测压缩率 69.1%,而不是网传的 90%。Maple Mono 是一个带连字和 Nerd-Font 控制台图标的开源圆角等宽字体,中英文宽度完美 2:1,它的官网正是以 WOFF2 格式分发这套字体。这篇文章拆解它的压缩流水线、实测数据,并给出从获取到自建 WOFF2 的步骤。
字体文件过大,网页端为什么扛不住
先说两个你能直接感受到的场景:
- 官网或在线 playground 要用
@font-face加载字体。如果直接把完整版 Nerd Font 版本丢给浏览器,单文件就是 1.9 MB(source/MapleMono-NF-Base.ttf 实测 1,941,072 字节),弱网下首屏要等好几秒,字体还是白等。 - 文档站、内部工具同时加载常规体 + 斜体 + 多个字重变体,字体包轻松破 5 MB,白白挤占首屏预算。
TTF 自身几乎没有有效压缩——它相当于把一箱纸直接快递,不抽真空,多重就是多重。而 Maple Mono 的网页版必须"轻装上阵",所以仓库里专门做了一套 TTF → WOFF2 的转换流程。
WOFF2 压缩流水线拆解:两步把 TTF 变成 woff2
依赖链
全部依赖在 requirements.txt 中,与 WOFF2 直接相关的有三个:
fonttools 4.62.1:字体操作库,WOFF2 封装的核心brotli 1.2.0:Brotli 压缩算法(CPython 平台直接走 C 实现)foundrytools-cli 2.1.1:提供ftcli转换命令行
构建流程
入口是 task.py 的page子命令(带--woff2开关),核心逻辑在 source/py/task/page.py 的 woff2 分支:
if woff2: print("Update woff2") font_dir = joinPaths(submodule_path, "public", "fonts") os.system("python build.py --ttf-only --no-nerd-font --least-styles") os.system(f"ftcli converter ft2wf -f woff2 {var_dir}")拆开看就是三步:
- 先做减法。
build.py产出"瘦身版"TTF:--no-nerd-font剔除数千个 Nerd Font 图标,--least-styles只保留 wght 变量轴。网页版不需要图标全家桶,只要骨架。 - WOFF2 封装。
ftcli converter ft2wf -f woff2负责重排字体表并用 Brotli 压缩:把分散的轮廓数据归并成连续流、去掉冗余元信息,再压一遍。类比快递发货前先抽真空打包——空气(冗余字节)抽掉了,压缩比自然更高。Brotli 相比 WOFF1 用的 DEFLATE,在同样质量下能压出更小的体积。 - 改名归位。生成的
*.ttf.woff2被重命名为*-VF.woff2,拷进官网子模块的public/fonts目录。
成品已直接提交在仓库的 woff2/var/ 下:常规体和斜体两个文件,拿来即用。
WOFF2 压缩率实测:Maple Mono 数据对比
| 文件 | TTF 大小 | WOFF2 大小 | 压缩率 |
|---|---|---|---|
| 常规变量字体 | 424,152 B(414.2 KB) | 130,908 B(127.8 KB) | 69.1% |
| 斜体变量字体 | 473,016 B(461.9 KB) | 152,816 B(149.2 KB) | 67.7% |
| 两个文件合计 | 897,168 B(876.1 KB) | 283,724 B(277.1 KB) | 68.4% |
如果你的页面要同时加载常规 + 斜体,字体体积从 876 KB 降到 277 KB,每个访问者省约 600 KB 流量——弱网环境下就是首屏快一截。另注意:这份 WOFF2 是去掉 Nerd Font 图标的"骨架版",完整字体有 1.9 MB,不可能直接塞进网页。
上手指南:获取与构建 Maple Mono WOFF2
普通用户
不用构建,直接用仓库里预编译好的 woff2/var/MapleMono[wght]-VF.woff2 和 woff2/var/MapleMono-Italic[wght]-VF.woff2,@font-face引一下即可。Linux(Arch 系)用户也可以装社区打包好的 woff2 版本,包名在 README.md 的 Install 一节有列(如maplemono-woff2)。
开发者自建
git clone https://gitcode.com/GitHub_Trending/ma/maple-font cd maple-font pip install -r requirements.txt git submodule update --init python task.py page --woff2其中git submodule update --init不能省,page命令会先检查官网子模块是否存在。产物落在maple-font-page/public/fonts/。
⚠️ WOFF2 使用避坑与进阶建议
- 别默认能压 90%。压缩率取决于字体内容本身的冗余度,Maple Mono 的 VF 源文件已经很紧凑,实测就是 68%~69%。宣传 90%+ 的案例,通常是因为原文件塞了大量未用字形和元数据,而不是算法更神。
- 先确认内容范围再用。仓库里的 woff2 是
--no-nerd-font构建的,不含 Nerd Font 图标;如果你网页里要在代码块中显示图标,得去掉该参数单独构建,并重新评估体积。 - 兼容性问题基本不用操心,但要留后手。WOFF2 依赖浏览器端 Brotli 解码,主流浏览器早已支持;若必须覆盖极老环境,保留一份 WOFF1 兜底。
Maple Mono 用"先做减法、再压缩"的简单两步流水线,把一个连字 + 图标的等宽字体在网页上跑到了 277 KB 以内——这套思路套用到你自己的 Web 字体上同样成立。对字体构建或 Web 字体分发有疑问的,可以直接去项目讨论区留言交流。
【免费下载链接】maple-fontMaple Mono: Open source monospace font with round corner, ligatures and Nerd-Font icons for IDE and terminal, fine-grained customization options. 带连字和控制台图标的圆角等宽字体,中英文宽度完美2:1,细粒度的自定义选项项目地址: https://gitcode.com/GitHub_Trending/ma/maple-font
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考