mirror of
https://github.com/2234839/web-font.git
synced 2026-09-04 23:02:27 +08:00
实现 GSUB/GPOS 的 gid 重映射子集化,解决 CJK 标点压缩丢失与连字不渲染问题。 核心改动: - ot-bytes.ts: 共享 OTWriter/OTReader + ScriptList/FeatureList 紧凑重排 - gpos-subset.ts: SinglePos/PairPos coverage/ClassDef gid 重映射 - gsub-subset.ts: type1/2/3/4/6 coverage/ClassDef/替换目标 gid 重映射 - gsub-reachable.ts: GSUB 替换链不动点迭代,收集无 unicode 的连字 target 字形 - GSUB.js + support/ttfreader/ttfwriter: GSUB 字节透传读写接入 - parse.js: 修复 F2DOT14 复合字形解码(负数 +0.5|0 截断 bug) 关键 bug 修复: - ChainContextSubst format2 字段错位:漏读 coverageOffset 致 chainSubClassSetCount 读成 lookaheadClassDefOffset,连字核心规则降级为空。修复后 FiraCode <= 走对 spacer+liga 路径。 - ScriptList/FeatureList 物理交错 + subtable 散落致 GSUB 膨胀损坏,改遍历重排。 SSIM: FiraCode-代码 0.9636 → 0.9923(与 pyftsubset 黄金像素级一致), CJK 标点压缩全面恢复(初夏明朝纯标点 0.7950→0.9920 等)。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
23 lines
2.0 KiB
Markdown
23 lines
2.0 KiB
Markdown
/loop 持续优化字体子集化性能和提高ssim评分,需要注意不要产生bug,所以要利用好基准测试,可以大胆放开手脚的去做(不管用什么办法,必须保证 SSIM 通过,意味着和原始字体人眼一致),但是优化完一定要通过`pnpx tsx ./基准测试.test.ts`。中途不要切换到其他模式,比如计划模式也不要询问我,你直接做就行了,请你持续的去优化,不要去询问我,不要去中断,好吧
|
||
|
||
把基准测试结果文档保存在本地 benchmark_results/ ,这样我方便查看。你的文档中应该在每个重大节点更新基准测试结果(benchmark_results/OPTIMIZATION_LOG.md),这样我能方便看到你使用了哪些优化方法,得到了什么样的优化效果。
|
||
不要修改基准测试中的full生成方案,如果基准测试结果不对一定是你的修改有问题,而非浏览器渲染等其他问题
|
||
|
||
=== 字体裁剪基准测试 ===
|
||
|
||
8个汉字: avg=23.6ms min=18.4ms max=37.2ms 输出=16,508 bytes ssim=1.0000
|
||
拉丁+数字: avg=16.4ms min=13.7ms max=18.2ms 输出=1,272 bytes ssim=1.0000
|
||
千字文前段: avg=59.4ms min=47.3ms max=76.5ms 输出=161,344 bytes ssim=1.0000
|
||
|
||
|
||
=== 一晚上优化后的 字体裁剪基准测试 ===
|
||
|
||
8个汉字: avg=7.7ms min=3.8ms max=20.7ms 输出=16,572 bytes ssim=1.0000
|
||
拉丁+数字: avg=3.2ms min=1.6ms max=6.6ms 输出=1,272 bytes ssim=1.0000
|
||
千字文前段: avg=11.7ms min=6.8ms max=21.7ms 输出=161,816 bytes ssim=1.0000
|
||
|
||
## 其他方向
|
||
|
||
woff2 格式是不是更优越,可以新增这种格式吗,然后ttf的也还支持,但是默认使用这个
|
||
|
||
就是有一个纯前端的优化,咱们提供的js SDK好像是通过定时器扫描的吧,这当然是一种方式,也是最省心的一种方式,但是咱们是不是还可以考虑另外一种方式,就是通过配置来启用定时扫描还是由用户自己的事件来触发,甚至由用户直接传递文本,这样的话对于首页上的demo来说,可能会有更高的及时性响应 |