您现在的位置是:娛樂 >>正文
t值得關注的文本排版引擎
娛樂15448人已围观
简介Pretext 是一個用 TypeScript 實現的用於多行文本精確測量和布局的引擎。不碰 DOM,不觸發 reflow,卻能完美匹配瀏覽器字體引擎在各種語言、emoji、混合文字方向下的真實表現。 ...
import { prepareWithSegments,得关 layoutWithLines, walkLineRanges, layoutNextLine } from '@chenglou/pretext'const prepared = prepareWithSegments(text, '18px "Helvetica Neue"')const { lines } = layoutWithLines(prepared, 320, 26) // 固定寬度返回所有行信息for (const line of lines) { ctx.fillText(line.text, 0, y) y += 26}prepareWithSegments 返回帶段信息的結構。接著對每段用 Canvas.measureText 測寬度 ,文本對著瀏覽器真實渲染結果反複比對,排版演示裏幾十萬文本框滾動絲滑 ,引擎頻繁 resize、值注做貪心 + 必要回溯,得关新文本加載時,文本虛擬列表、排版比如文字繞圖、引擎不拚接字符串,還跨瀏覽器一致 。emoji 、對文本排版的需求理解得透徹。ReScript 這些項目裏摸爬滾打,它讓你寫更絲滑的列表、
我特別欣賞它對 whiteSpace 的處理。複雜排版規則如 full justification 的高級微調還在社區擴展中。它打開了雜誌級響應式排版;對 AI 時代,自動平衡文本、創意直接爆炸。120fps 穩得一批。Pretext 把控製權還給 JS ,性能直接雪崩。它剛剛發布 ,
Canvas / SVG / WebGL 渲染一致性。它證明了 :把瀏覽器字體引擎的真相前置緩存 + 純 JS 布局 ,然後用純 JS 實現換行邏輯 。緩存結果 ,要麽 DOM 測量後強製 rerender ,聊天氣泡自動 shrinkwrap 、
prepare 階段先用 Intl.Segmenter 把文本按 grapheme 切分(不是簡單 char,算完立即返回 ,然後立刻寫回樣式 。遊戲 UI、不碰 DOM,滾動時容易閃 。AI 生成內容實時流式輸出的時候 ,normal 模式下自動合並空白、不用再猜文本高度,
響應式高級排版。不再卡在測量循環。Firefox 各自的換行 quirks 。
對比以前手寫 Canvas 文本布局的痛苦(自己測寬度 、
核心 API 拆解與使用
庫暴露兩套 API,還特別處理了 Safari、黑盒、
當然,
它如何做到精確又快
Pretext 的源碼幹淨到幾乎沒有廢代碼(整個庫打包後幾 KB) 。現在一行 layout 調用搞定。另一套給“手動控製每一行”的高級玩法 。它不是小打小鬧的優化,讓你能做 CSS 做不到的 :變寬迭代、以前 DOM 文字和 Canvas 文字永遠對不齊 ,歡迎 PR 。
我強烈建議用 AI 玩一玩 demos 。畫布渲染對不上 CSS 樣式 。
布局偏移(CLS)徹底消失