mirror of
https://github.com/2234839/web-font.git
synced 2026-09-04 23:02:27 +08:00
思源 GSUB 56 lookup 中 4 个非空 type1 lookup(locl 地区变体)的 coverage 极大(lookup#43 = 8881 gid,#0=729,#42=636),但子集仅命中个位数。 原 serializeSingleSubst 用 readCoverageGids 全量展开 coverage 再逐个查 gidLookup(8881 次几乎全未命中),占 subsetGSUB 84%(0.184ms/call)。 改为遍历子集原始 gid(currentSortedSubsetGids,仅 19 项)+ coverageIndexOf 在 coverage 中二分定位下标(format2 下标对应 substituteGlyphIDs 数组), O(subsetSize × log covCount) 替代 O(covCount)。与 reachable 侧 [[gsub-reachable-bigcov-byte-bsearch]] 同一类「展开全量消费极少」浪费。 仅当 covGidCount > subsetSize×4 且 >16 时启用反转,短 coverage(FiraCode 等)走原路径避免二分开销。导出 coverageIndexOf/coverageCount 供复用。 subsetGSUB 思源 min 0.204→0.075ms(-63%),otf-思源 woff2 avg 2.7→1.0ms。 输出逐字节一致(思源 GSUB 6560 bytes 差异 0),全字体 SSIM 不变。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>