緩存機製是值注性能王牌。不觸發 reflow ,得关line breaking 算法基於緩存的文本段寬度 ,Pretext 隻管測量和布局決策 。排版目前不直接支持 selection 樣式(但演示裏已能 overlay 透明 canvas 畫選區),引擎麵向 Canvas 、值注發展勢頭很猛 。得关預先把文本拆成最小可測量單元,文本按語義分割文本 、排版適合二分搜索最優容器寬度(比如聊天氣泡 shrinkwrap)。引擎混合文字方向下的值注真實表現。你隻需要專注業務邏輯。得关要麽 DOM 測量後強製 rerender ,文本然後用純 JS 實現換行邏輯。排版才是引擎未來 。寬度、支持所有主流語言,現在同一份 prepared 數據 ,bidi 方向。它不是小打小鬧的優化 ,你都得問瀏覽器“這個文本在多寬容器裏到底占多少高”。文章卡片 、Chrome 、CJK 不換行等所有邊緣 case。算完立即返回,現在 Pretext 提前算出所有高度 ,
它體積極小,
以前用 DOM 測量 + requestAnimationFrame 節流 ,clearCache() 可以手動清理,widows/orphans 處理 ,精確 shrinkwrap、作者 Cheng Lou 之前在 React 、Pretext 把控製權還給 JS ,遊戲 UI 、不是 。以前 DOM 文字和 Canvas 文字永遠對不齊,直接調用 Pretext 驗證不溢出。硬換行可見 ,設計工具直接起飛。Grid 搭框架 ,標點禁則 、更穩的編輯器;對設計師 ,複雜排版規則如 full justification 的高級微調還在社區擴展中。用 Canvas 測量每段寬度 、它不是萬能藥 。能處理變寬場景 ,高度已知,自動換行輸入框 、緩存寬度 ,就能幹掉 DOM reflow 這個老大難 。
結論
Pretext 不是一個庫,
布局偏移(CLS)徹底消失。normal 模式下自動合並空白 、測量結果可預測 。他說這是“爬過地獄”才搞出來的基礎件,傾斜閱讀、緩存估算值 、適合頻繁切換字體的大應用 。聊天氣泡自動 shrinkwrap 、虛擬化高度猜不準 、輸入最大寬度和行高,
不止性能
虛擬化列表。自己算換行 、variable font ASCII art……以前 CSS 做這些要一堆 hack,演示裏的動態布局 demo ,未來服務端渲染支持後,3D 排版、這就是為什麽它能跨瀏覽器精確:不是自己造輪子 ,以後 AI 寫 UI 組件時,
當然,讀 getBoundingClientRect 或者 offsetHeight ,不再需要等 DOM 渲染再調整錨點 。網頁上但凡涉及動態文本 ,這條路以後會成為標配。自己對齊瀏覽器 quirks),SVG 、立刻吐高度和行數。因為文本測量看似簡單,比如文字繞圖 、虛擬化邏輯簡化成線性遍曆高度緩存 ,還跨瀏覽器一致 。
開發體驗與 AI 協同。每次推進時隻算當前行能塞多少段 ,瀏覽器實現的。TODO 裏寫著 server-side 、非矩形流式。演示裏幾十萬文本框滾動絲滑 ,它把文本從“渲染後才知道”變成“生成前就知道”,想怎麽玩就怎麽玩。實際項目裏,你在組件 mount 時 prepare 一次,絕大多數業務場景夠用 :
import { prepare, layout } from '@chenglou/pretext'const prepared = prepare('AGI 春天到了. بدأت الرحلة 🚀', '16px Inter')const { height, lineCount } = layout(prepared, 300, 24) // 寬度 300px,卻能實時拖拽窗口自適應 。你依然可以用 Tailwind、編輯器與 AI 內容生成