- 新增 scripts/build-perf/subset-fonts.py:读字体 CSS 的 @font-face
(unicode-range)→ 扫内容收集实际用字 → 逐片交集裁切(pyftsubset
--flavor=woff2)→ 空片丢弃、重写 src 只留自产 woff2;支持
--chars-from/--chars-mode(all|headings)/--min-bytes/--merge
- 实测口径修正后结论(关键):汇文明朝原 694KB/页 → 子集 420KB/页
(-40%,真收益,已接入);站酷快乐体 163KB → 177KB(+9%,字跨片
分散致片数增加,**不启用**,保留原 @fontsource 源)
- merge 模式(合并单文件)标记实验性:fontTools.merge 对 CJK 切片字表
冲突敏感,实测产出异常,生产不用
- 三处实现坑入档:①hast 与 @fontsource CSS 一个 face 常带多格式
(woff2+woff),只替换首个 url 会残留失效引用(首版缺 58 个 .woff)
→ 改整段替换 src;②无 unicode-range 的 face 需按全范围处理,否则
原样保留同样残留引用;③裸跑 pyftsubset 需 fonttools+brotli
验证: pnpm astro build 48 页 exit 0;E2E 37/37;playwright 实测汇文
694KB→420KB 且字体栈生效(WF-Hwmc 命中)
Spec: 2026-11-02_blog-5g-pages (T7)
Co-authored-by: GLM-5.3
3.2 KiB
3.2 KiB