mirror of
https://github.com/2234839/web-font.git
synced 2026-09-16 22:26:03 +08:00
perf(gsub): emitCoverage 去掉冗余的 new Set 去重
emitCoverage 原用 Array.from(new Set(newGids)).sort() 去重+排序。 但所有调用方传入的 newGids 逻辑上保证无重复: - readCoverageRemapped 按原 coverage(规范要求 gid 唯一)升序过滤,每个原 gid 映射唯一新 gid - entries.map(e=>e.from) 的 from 是 entry 主键(唯一) 实测 FiraCode 单次子集化 327 次 emitCoverage 调用 0 次发现重复, new Set 去重纯属 GC 开销(Set 构造+迭代+Array.from)。 改为 newGids.slice().sort(),消除 Set 分配。sort 保留(新 gid 随原 gid 非单调,需排序)。 验证:与优化前字节逐字节一致(cmp 通过,8724==8724), pnpx tsx 基准测试.test.ts 全部 SSIM 无回归。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
5da4cd5b06
commit
2da35e4257
@ -225,8 +225,13 @@ function readCoverageRemapped(
|
||||
* 自动选择 format1(列表)或 format2(区间)中更紧凑的。
|
||||
*/
|
||||
function emitCoverage(w: Writer, newGids: number[]): number {
|
||||
/** 去重并升序(Coverage 要求升序且唯一) */
|
||||
const sorted = Array.from(new Set(newGids)).sort((a, b) => a - b);
|
||||
/** 升序(Coverage 要求升序)。
|
||||
* 无需去重:所有调用方传入的 newGids 逻辑上保证无重复——
|
||||
* readCoverageRemapped 按原 coverage(规范要求 gid 唯一)升序过滤,每个原 gid 映射唯一新 gid;
|
||||
* entries.map(e=>e.from) 的 from 是 entry 主键(唯一)。
|
||||
* 实测 FiraCode 单次子集化 327 次 emitCoverage 调用 0 次发现重复,去重(new Set)纯为 GC 开销。
|
||||
* slice 复制后原地排序,避免修改调用方的数组。 */
|
||||
const sorted = newGids.slice().sort((a, b) => a - b);
|
||||
const off = w.length;
|
||||
let ranges: Array<{ start: number; end: number }> = [];
|
||||
for (let i = 0; i < sorted.length; ) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user