diff --git a/docs/changelog.html b/docs/changelog.html index ad61162..f37a137 100644 --- a/docs/changelog.html +++ b/docs/changelog.html @@ -1,4 +1,4 @@ - +
@@ -2545,6 +2545,19 @@ main > *:nth-child(n+6) { animation-delay: 0.46s; }聚珍(Juzhen)/cjk-autospace 變更紀錄。← 回文檔
+下游效能訴求(掃描疑 O(n²))之第一層——無狀態、保行為、無公開 API 變更之確定收益。單元測試 129→130 全綠、輸出不變。
+finder.category 以 WeakMap<Element, InlineCategory> 記憶化,砍除 collectRuns/jiyaAdjacency/jinze/split 跨 pass 對同一元素之重複 el.matches()(pill/isolate/avoid 選擇器)。實測 pill/isolate 密集頁面 el.matches() 8204→5842(約降三成,命中率 55%)。安全:單次 render 內一元素之分類恆定、且 Finder 隨 makeCtx 每次 render 重建 → 快取僅存活單次 render、無跨 render 失效(持久化屬另議)。block.querySelector(sel) 掃整棵子樹之 O(Σ塊子樹)(深塊嵌套下 O(n²));某塊為另一塊之最近塊祖先 ⟺ 含塊級後代,與原 querySelector 同口徑、行為等價。computeCategory 由 1041 增至 2322、el.matches() 由 5842 增至 8204——證快取真減負而非空操作(初次插桩誤打 HTMLBodyElement.prototype 而漏計,改補 Element.prototype.matches 後為準)。el.matches() 之最大來源為 insidePill 之「逐文本節點沿祖先鏈 pillMatches」(eachTextNode 每文本節點一趟、未記憶化)。下游 .selection-bar-message 病例:垂懸字(orphan)之段末實義字落於 opaque <button>(巢於可切 <span>)時,splitElementAt 僅驗頂層 span 可切;splitTreeAfter 逐層克隆「文本節點→top」祖先鏈時,中間 opaque button 從未複查即被克隆肢解(複製出 splitoff button、破壞互動元素)。firstText/lastText 守下潛(遇非可切回 null),攀升卻無對稱守衛——此即真正病根,下游 per-instance 迴避僅治標。