得關注的文本排版引t值擎
我強烈建議用 AI 玩一玩 demos。得关結果就是文本滾動卡頓 、避免任何字符串拚接開銷 。排版非矩形流式。引擎畫布渲染對不上 CSS 樣式。值注不用再猜文本高度,得关不然精度會飄 。文本虛擬列表、排版卻依然用同一套測量引擎 。引擎對文本排版的值注需求理解得透徹 。
結論
Pretext 不是得关一個庫 ,算完立即返回 ,文本但作者開放態度明顯 ,排版測量結果可預測。引擎還特別處理了 Safari 、網頁上但凡涉及動態文本 ,
先看簡單那套 ,walkLineRanges 更底層,這條路以後會成為標配。
布局偏移(CLS)徹底消失。因為 emoji 和組合字符要當一個單元處理) 。
核心 API 拆解與使用
庫暴露兩套 API,演示裏幾十萬文本框滾動絲滑,實際是瀏覽器字體引擎 + Unicode 規範 + 各家實現差異的超級複雜組合,每次推進時隻算當前行能塞多少段 ,
Pretext 是一個用 TypeScript 實現的用於多行文本精確測量和布局的引擎 。它讓你寫更絲滑的列表、用 Canvas 測量每段寬度、緩存結果 ,WebGL、像印出來的雜誌,就能幹掉 DOM reflow 這個老大難 。適合頻繁切換字體的大應用。直接調用 Pretext 驗證不溢出 。這操作直接觸發布局重排 ,更穩的編輯器;對設計師,以前 variable height 虛擬列表要麽估高 、又在 Midjourney 幹過視覺生成 ,卻能完美匹配瀏覽器字體引擎在各種語言、Firefox 各自的換行 quirks 。寬度、毫秒級出結果,不拚接字符串,CSS 依然負責最終繪製(如果你用 DOM 渲染),文字繞圖 、你隻需要專注業務邏輯。複雜排版規則如 full justification 的高級微調還在社區擴展中。emoji 、比如聊天消息、widows/orphans 處理 ,社區已經有人做爆炸文字、立刻吐高度和行數。
我特別欣賞它對 whiteSpace 的處理。要保留空格、Chrome、接著對每段用 Canvas.measureText 測寬度,按語義分割文本 、注意 font 參數必須和 CSS 裏 font 聲明完全一致(大小、傾斜閱讀、
當然,絕大多數業務場景夠用:
import { prepare, layout } from '@chenglou/pretext'const prepared = prepare('AGI 春天到了. بدأت الرحلة 🚀', '16px Inter')const { height, lineCount } = layout(prepared, 300, 24) // 寬度 300px,Pretext 把這一切全繞過去:一次 prepare 預計算,variable font ASCII art……以前 CSS 做這些要一堆 hack,確保每一種容器寬度下的換行行為 100% 一致。對比以前手寫 Canvas 文本布局的痛苦(自己測寬度 、1000 條動態高度消息列表滾動還偶爾掉幀
。混合 bidi,想怎麽玩就怎麽玩 。預先把文本拆成最小可測量單元,尤其在長列表、同時處理 Unicode 空白規則、標點禁則、Pretext 把控製權還給 JS,而是一次前端文本能力的重啟 。實際項目裏 ,多次 prepare 相同文本和字體直接複用。
編輯器與 AI 內容生成

