mirror of
https://github.com/2234839/web-font.git
synced 2026-09-04 23:02:27 +08:00
perf(gsub): parseChainFormat3 coverage/records 数组按 count 预分配
arr: number[][] 与 records 对象数组原用空数组 + push,fmt3 高频路径(每 subtable 三组 coverage + records)触发 GrowFastSmiOrObjectElements。改按已知 count/seqCount 预分配容量 + 下标赋值。 node --prof GrowFast 4.3%→3.6%、ArrayPrototypePush 3.7%→2.5%。FiraCode 输出字节 不变(acc 一致),29 用例 SSIM 全通过。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
98102bc3be
commit
2ed666ec58
@ -1178,13 +1178,14 @@ function parseChainFormat3(
|
||||
const readCovArr = (): number[][] | null => {
|
||||
const count = r.u16(p);
|
||||
p += 2;
|
||||
const arr: number[][] = [];
|
||||
/** 按 count 预分配容量,消除 push 触发的 GrowFast(fmt3 高频,每 subtable 三组 coverage) */
|
||||
const arr: number[][] = new Array<number[]>(count);
|
||||
for (let k = 0; k < count; k++) {
|
||||
const covOff = off + dv.getUint16(p + k * 2, false);
|
||||
const newGids = readCoverageRemapped(r, covOff, gidLookup, covCache);
|
||||
/** coverage 全部 gid 落在子集外(原非空)→ 规则失效 */
|
||||
if (newGids === null) return null;
|
||||
arr.push(newGids);
|
||||
arr[k] = newGids;
|
||||
}
|
||||
p += count * 2;
|
||||
return arr;
|
||||
@ -1196,9 +1197,10 @@ function parseChainFormat3(
|
||||
|
||||
const seqCount = r.u16(p);
|
||||
p += 2;
|
||||
const records: Array<{ seq: number; lookup: number }> = [];
|
||||
/** 按 seqCount 预分配,消除 records 对象数组 grow */
|
||||
const records: Array<{ seq: number; lookup: number }> = new Array<{ seq: number; lookup: number }>(seqCount);
|
||||
for (let k = 0; k < seqCount; k++) {
|
||||
records.push({ seq: dv.getUint16(p + k * 4, false), lookup: dv.getUint16(p + k * 4 + 2, false) });
|
||||
records[k] = { seq: dv.getUint16(p + k * 4, false), lookup: dv.getUint16(p + k * 4 + 2, false) };
|
||||
}
|
||||
return { backCovs, inputCovs, lookCovs, records };
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user