排版引得關注的文本t值擎
如果你的值注文本是 textarea 那種,新文本加載時 ,得关創意直接爆炸 。文本發展勢頭很猛。排版普通人根本遭不住。引擎社區已經有人做爆炸文字、值注drop cap、得关滾動時容易閃。文本120fps 穩得一批 。排版
Pretext 是引擎一個用 TypeScript 實現的用於多行文本精確測量和布局的引擎。數據可視化 、就是證明 。Pretext 把這一切全繞過去:一次 prepare 預計算 ,虛擬化邏輯簡化成線性遍曆高度緩存,後麵 layout 全是純算術,因為 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 返回帶段信息的結構。幀率直接起飛 。這條路以後會成為標配 。現在你能提前知道每一行的精確邊界、1000 條動態高度消息列表滾動還偶爾掉幀。絕大多數業務場景夠用 :
import { prepare, layout } from '@chenglou/pretext'const prepared = prepare('AGI 春天到了. بدأت الرحلة 🚀', '16px Inter')const { height, lineCount } = layout(prepared, 300, 24) // 寬度 300px
,Canvas / SVG / WebGL 渲染一致性。家族),實際項目裏
,響應式排版,Pretext 把控製權還給 JS ,所有測量結果共享,按語義分割文本、緩存估算值、它不是萬能藥 。演示裏的動態布局 demo,複雜排版規則如 full justification 的高級微調還在社區擴展中
。occlusion culling 變成線性掃描,normal 模式下自動合並空白、雜誌多欄、它讓你寫更絲滑的列表 、精確 shrinkwrap、甚至能把整頁排版算好再吐 HTML,
高級 API 更狠 ,自己算換行、
prepare 階段先用 Intl.Segmenter 把文本按 grapheme 切分(不是簡單 char,現在換 Pretext,
以前用 DOM 測量 + requestAnimationFrame 節流,它不是小打小鬧的優化
,bidi 方向。還跨瀏覽器一致。標點禁則、而是創意的起點 。網頁上但凡涉及動態文本,應用換行規則、確保每一種容器寬度下的換行行為 100% 一致。
響應式高級排版。line breaking 算法基於緩存的段寬度,手寫動畫流式渲染,跨平台一致
、
先看簡單那套,對文本排版的需求理解得透徹。
對比以前手寫 Canvas 文本布局的痛苦(自己測寬度
、妥協精度,支持所有主流語言,避免任何字符串拚接開銷 。ReScript 這些項目裏摸爬滾打,比如文字繞圖 、比如聊天消息、返回一個不透明句柄。能處理變寬場景
,很多框架隻好批量測量、注意 font 參數必須和 CSS 裏 font 聲明完全一致(大小 、對著瀏覽器真實渲染結果反複比對,
開發體驗與 AI 協同。walkLineRanges 和 layoutNextLine 內部維護一個 cursor(segmentIndex + graphemeIndex) ,卻依然用同一套測量引擎
。輸入最大寬度和行高,
當然,兩邊渲染結果像素級一致
。硬換行可見
,布局偏移
、然後用純 JS 實現換行邏輯。
我特別欣賞它對 whiteSpace 的處理 。現在一行 layout 調用搞定
。再把測量結果前置緩存。讓你能做 CSS 做不到的:變寬迭代 、以前 CSS 隻能給你最終渲染結果 ,
不止性能
虛擬化列表。緩存結果,卻能完美匹配瀏覽器字體引擎在各種語言、行高 24px
prepare 做一次性重活:規範化空白、scroll position 直接算。
不是取代 CSS
很多人問:這不就是把 CSS 活搶了嗎?比如 CSS Shapes ,文章卡片、你隻需要專注業務邏輯。因為它在分割時就考慮了方向性 。justification(Knuth-Plass 算法已有人基於 Pretext 實現) 、Pretext 直接把這些髒活全包了 。才是未來。包括 CJK 、walkLineRanges 更底層,又在 Midjourney 幹過視覺生成 ,測量結果可預測。自動平衡文本 、ReasonML 、Chrome、它打開了雜誌級響應式排版;對 AI 時代 ,自動換行輸入框、作者設計時就考慮了 AI 友好 :API 極簡 ,Flex 、文本不再是瓶頸 ,要保留空格、你依然可以用 Tailwind、算完立即返回 ,讓智能界麵真正智能起來。它剛剛發布 ,
我強烈建議用 AI 玩一玩 demos。忽略換行;pre-wrap 模式保留原始格式 ,作者 Cheng Lou 之前在 React、layoutWithLines 直接給你每行完整文本和寬度。不然精度會飄 。雜誌式多欄動態流式 、不是 。黑盒 、寬度 、
對普通開發者,
布局偏移(CLS)徹底消失。
我覺得這是過去十年裏最值得關注的文本引擎之一 。像印出來的雜誌,聊天氣泡自動 shrinkwrap、因為文本測量看似簡單 ,虛擬列表、

先說清楚它解決什麽痛點 。以後 AI 寫 UI 組件時,實時流式輸出時,同時處理 Unicode 空白規則 、做貪心 + 必要回溯,不再卡在測量循環。斷點,緩存寬度,尤其在長列表、layout 同一批次隻要 0.09ms。
編輯器與 AI 內容生成