mirror of
https://github.com/2234839/web-font.git
synced 2026-09-04 23:02:27 +08:00
fontSubset 原先对 probe 阶段也调用完整 Font.create(subset 模式), 它会解析子集 glyph 的 glyf 轮廓(parseSimpleGlyf)。但 probe 只需要 GSUB(原始字节透传)和 cmap(codepoint→gid),根本不需要轮廓。 实测 CJK 字体(思源黑体/令东齐伋)两次 Font.create 占总耗时 36%~63%。 新增 gsub-probe.ts:直接从字体字节解析表目录,提取 GSUB 字节切片 + cmap 的 codepoint→gid 查找(format4 BMP + format12 补充平面二分, 与 fonteditor-core readWindowsAllCodes 优先级一致),完全跳过 glyf。 三种路径(与原 Font.create probe 行为严格等价): - otf / ttf 无 GSUB:直接判无 reachable(otf 的 fonteditor probe 本就 origGSUB=undefined),连 probe Font.create 也跳过 - ttf 有 GSUB 且 cmap 含 fmt4/12:轻量 probe 算 reachable - ttf 有 GSUB 但 cmap 无 fmt4/12(极罕见):回退 Font.create probe 验证: - seedGids / GSUB字节 / reachable 与原 probe 逐项等价(FiraCode 87 target 等) - 5 个代表字体 woff2 输出与优化前逐字节一致(cmp 通过) - pnpx tsx 基准测试.test.ts 全部 SSIM 无回归: 思源黑体-千字文中段 7.8→4.5ms(-42%)、千字文前段 11.9→8.9ms(-25%)、 otf-思源 2.9→1.9ms(-34%)、霞鹜文楷-汉字标点 5.0→2.2ms(-56%)、 FiraCode 18.5→17.2ms,SSIM 全部不变 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>