Pretext:纯JavaScript/TypeScript文本测量与排版库
Midjourney工程师Cheng Lou开源了Pretext,这是一个零依赖的纯JavaScript/TypeScript库,用于高性能文本测量与排版。它绕过浏览器DOM测量(如getBoundingClientRect),通过纯算术计算文本高度和换行,彻底避免布局回流。
核心工作原理
- 准备阶段 (
prepare()):通过Canvas API一次性测量字符宽度并缓存。 - 布局阶段 (
layout()):基于缓存数据,进行纯算术运算完成排版。
性能表现
在500段文本的基准测试中:
prepare()耗时约19mslayout()仅需0.09ms
性能对比:0.05ms vs 30ms,零次回流 vs 数百次回流。
特性与支持
- 支持全语种(包括中日韩、阿拉伯语)及emoji、混合双向文本。
- 可渲染输出到DOM、Canvas、SVG。
典型应用场景
- 无需猜测高度的虚拟列表与遮挡剔除
- JavaScript驱动的自定义布局(如瀑布流)
- 聊天气泡的多行文本自适应宽度收缩
- 文本环绕图片等复杂编辑排版