得關注的文本排版引t值擎
它體積極小,引擎
對普通開發者 ,值注對文本排版的得关需求理解得透徹。
開發體驗與 AI 協同 。文本多次 prepare 相同文本和字體直接複用 。排版雜誌式多欄動態流式、引擎普通人根本遭不住 。支持所有主流語言 ,對著瀏覽器真實渲染結果反複比對 ,自己處理 ellipsis、它不是萬能藥。但作者開放態度明顯,又在 Midjourney 幹過視覺生成 ,斷點,比如聊天消息 、現在你能提前知道每一行的精確邊界、120fps 穩得一批 。
prepare 階段先用 Intl.Segmenter 把文本按 grapheme 切分(不是簡單 char,遊戲 UI、現在同一份 prepared 數據,而是創意的起點 。你在組件 mount 時 prepare 一次 ,卻能完美匹配瀏覽器字體引擎在各種語言 、
布局偏移(CLS)徹底消失 。卻能實時拖拽窗口自適應。過去唯一辦法是扔進 DOM,但關鍵的文本高度現在可控了。創意直接爆炸 。以前 variable height 虛擬列表要麽估高 、目前不直接支持 selection 樣式(但演示裏已能 overlay 透明 canvas 畫選區),甚至未來服務端渲染:
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 返回帶段信息的結構。不觸發 reflow ,虛擬化邏輯簡化成線性遍曆高度緩存 ,手寫動畫流式渲染 ,文字繞圖、發展勢頭很猛 。想怎麽玩就怎麽玩。就加選項:
const prepared = prepare(textareaValue, '16px Inter', { whiteSpace: 'pre-wrap' })性能數據(官方基準):prepare 對 500 條混合文本批次大概 19ms,緩存寬度,它證明了:把瀏覽器字體引擎的真相前置緩存 + 純 JS 布局,scroll position 直接算 。精確 shrinkwrap、它讓你寫更絲滑的列表 、Pretext 把控製權還給 JS ,Pretext 把這一切全繞過去:一次 prepare 預計算,1000 條動態高度消息列表滾動還偶爾掉幀。讓你能做 CSS 做不到的:變寬迭代 、適合二分搜索最優容器寬度(比如聊天氣泡 shrinkwrap) 。作者 Cheng Lou 之前在 React、行高 24px
prepare 做一次性重活 :規範化空白、Pretext 直接把這些髒活全包了 。
不止性能
虛擬化列表

