From 60db8d226be2f6817b7a8870708335562939143b 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 11:55:24 +0800 Subject: [PATCH] =?UTF-8?q?perf(woff2):=20triplet=20=E7=BC=96=E7=A0=81=20c?= =?UTF-8?q?ase2/3/4=20=E5=8E=BB=E6=8E=89=E5=86=97=E4=BD=99=E7=9A=84?= =?UTF-8?q?=E8=BD=B4=E9=9D=9E=E9=9B=B6=E5=88=A4=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit case1 排除 dx===0、case2 排除 dy===0 后,走到 case3/case4 时两轴必非零, 故 case3/case4 的 'dx!==0 && dy!==0' 是冗余判定。令东 74.6% 点命中 case3, 每点省 2 次比较。case2 的 'dx!==0' 同理冗余(case1 未命中且 dy===0 则 dx 必非0)。 cmp 字节一致,逻辑等价已证明。 Co-Authored-By: Claude Opus 4.8 (1M context) --- vendor/fonteditor-core/woff2/woff2-encode.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/vendor/fonteditor-core/woff2/woff2-encode.js b/vendor/fonteditor-core/woff2/woff2-encode.js index 8a13085..1dee7e6 100644 --- a/vendor/fonteditor-core/woff2/woff2-encode.js +++ b/vendor/fonteditor-core/woff2/woff2-encode.js @@ -517,11 +517,14 @@ function transformGlyfAndLoca(glyfData, locaData, indexFormat, numGlyphs) { _gs[wpos] = absDy & 0xFF; flag = curveBit + ((absDy & 0xF00) >> 7) + (dy >= 0 ? 1 : 0); adv = 1; - } else if (dy === 0 && dx !== 0 && absDx < 1280) { + } else if (dy === 0 && absDx < 1280) { + /** 优化316: case2 去掉冗余 `dx !== 0`——case1 已排除 dx===0,走到此分支 dx 必非 0 */ _gs[wpos] = absDx & 0xFF; flag = curveBit + 10 + ((absDx & 0xF00) >> 7) + (dx >= 0 ? 1 : 0); adv = 1; - } else if (dx !== 0 && dy !== 0 && absDx < 65 && absDy < 65) { + } else if (absDx < 65 && absDy < 65) { + /** 优化316: case3 去掉冗余 `dx !== 0 && dy !== 0`——case1/case2 已排除任一轴为 0, + * 走到此分支两轴必非 0。令东 74.6% 的点命中此分支,省 2 次/点冗余比较 */ const ax = absDx - 1; const ay = absDy - 1; _gs[wpos] = ((ax & 0xF) << 4) | (ay & 0xF); @@ -529,7 +532,8 @@ function transformGlyfAndLoca(glyfData, locaData, indexFormat, numGlyphs) { const ySignBit = dy >= 0 ? 1 : 0; flag = curveBit + 20 + (ax & 0x30) + ((ay & 0x30) >> 2) + xSignBit + 2 * ySignBit; adv = 1; - } else if (dx !== 0 && dy !== 0 && absDx < 769 && absDy < 769) { + } else if (absDx < 769 && absDy < 769) { + /** 优化316: case4 同理去掉冗余 `dx !== 0 && dy !== 0` */ const ax = absDx - 1; const ay = absDy - 1; _gs[wpos] = ax & 0xFF;