From 694364769e8a5f1d26817450ccf87bca84af4fec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B4=AE=E7=94=9F=EF=BC=88=E5=AD=90=E8=99=9A=EF=BC=89?= <2234839456@qq.com> Date: Fri, 24 Jul 2026 16:34:08 +0800 Subject: [PATCH] =?UTF-8?q?perf(gsub-reachable):=20=E5=90=88=E5=B9=B6=20lo?= =?UTF-8?q?okupRelOffs=20=E8=AF=BB=E5=8F=96=E5=88=B0=20lookup=20parse=20?= =?UTF-8?q?=E4=B8=BB=E5=BE=AA=E7=8E=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原实现先收集 lookupRelOffs 到中间数组,主循环再按下标回读。合并后直接在 主循环内读取偏移,省去中间数组分配与一次回读。FiraCode collectReachable -2.3%(0.116→0.113ms),reachable 集合 sha256 不变 Co-Authored-By: Claude Opus 4.8 (1M context) --- backend/font_util/gsub-reachable.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/backend/font_util/gsub-reachable.ts b/backend/font_util/gsub-reachable.ts index 318853b..31625e3 100644 --- a/backend/font_util/gsub-reachable.ts +++ b/backend/font_util/gsub-reachable.ts @@ -104,19 +104,16 @@ export function collectReachableGsubTargets( const lookupListOff = r.u16(8); const lookupCount = r.u16(lookupListOff); - const lookupRelOffs: number[] = []; - for (let i = 0; i < lookupCount; i++) { - lookupRelOffs.push(r.u16(lookupListOff + 2 + i * 2)); - } - /** 解析每个 lookup 的 (effectiveType, subtableAbsOffs) */ + /** 解析每个 lookup 的 (effectiveType, subtableAbsOffs)。 + * 合并 lookupRelOffs 读取到主循环(避免先收集到中间数组再按下标回读)。 */ interface LookupParsed { effectiveType: number; subtableAbsOffs: number[]; } const lookups: LookupParsed[] = []; for (let i = 0; i < lookupCount; i++) { - const lOff = lookupListOff + lookupRelOffs[i]; + const lOff = lookupListOff + r.u16(lookupListOff + 2 + i * 2); const lookupType = r.u16(lOff); const subTableCount = r.u16(lOff + 4); const subtableAbsOffs: number[] = [];