随笔 / 前端 × AI × 浏览器

Pretext:当前端第一次把“文字”当成实时图形系统来控制

· 前端 浏览器渲染 AI/Agent

Pretext 不是一个普通的文字排版库,而是在浏览器里把“文本测量”从 DOM 回流里拆出来,变成可缓存、可编排、可实时重算的基础能力。它厉害的地方,不只是快,而是让文字第一次有机会像图形系统里的几何对象一样,被前端开发者直接操控。

这两天看到很多人转 Pretext 的 demo,第一眼都会觉得:哇,怎么浏览器里的文字突然这么“听话”了?可以绕着障碍物流动,可以做像杂志一样的连续排版,可以让 message bubble 收得又紧又自然,还能让瀑布流、卡片布局在渲染前就知道自己的高度。

如果只从 demo 观感看,它像是一个“排版效果很厉害”的库。但我认真把它的 README、研究日志、benchmark 和 demo 结构都过了一遍以后,我的结论是:Pretext 真正厉害的,不是做了几个酷炫 demo,而是它把浏览器里最麻烦的一类能力——多行文本测量与换行布局——从 DOM 黑箱里抽了出来。

Pretext 的本质,不是一个排版组件库,而是一层“文本布局引擎化”的基础设施。

Pretext 到底在解决什么问题?

浏览器里很多复杂 UI 做不顺,卡点不在“画不出来”,而在“你没法提前知道文字会占多少空间”。

传统前端处理文本高度,往往要么靠猜,要么先把文字插进 DOM,再用 getBoundingClientRect()offsetHeight 之类的方法去量。问题是,这些读取会触发布局回流。更糟的是,一旦你的页面里有很多组件都在“写一点 DOM → 读一下高度 → 再写一点”,浏览器就会进入经典的 layout thrashing:读写交错、整页反复重排。

Pretext 的做法很干脆:不要在热路径里问 DOM。 它把流程拆成两步:

  1. prepare(text, font):先对文本做一次分析、分段、测量、缓存。
  2. layout(prepared, maxWidth, lineHeight):之后每次只用纯算术去推导这个宽度下有几行、多高。

这意味着,昂贵的工作被前置,热路径只剩下非常便宜的重算。官方当前快照里,500 段文本批量处理时,prepare() 大约是 18–19ms,但 layout() 只要 0.09ms;相比 DOM interleaved 的写读交错方案,Chrome 下快出约 480 倍,Safari 下甚至是数量级更大的优势。

它为什么会让人觉得“demo 特别惊艳”?

因为 Pretext 解决的不是单点性能,而是把原本不能实时做的事情,变成了“可以每帧都做”。一旦你能在 60fps/120fps 的交互里不断重算文字布局,很多以前只存在于 print、native 或者昂贵定制系统里的效果,就会突然落到普通前端开发者手里。

1. 它让“文字”从黑箱,变成可编排对象

普通 Web 开发里,文字往往是盒模型的一部分:你给它一个容器,它自己往下流。你知道最终结果,但不掌控中间过程。Pretext 提供了 layoutWithLines()walkLineRanges()layoutNextLine() 这些 richer API 后,开发者开始能拿到“每一行是什么、宽多少、从哪里到哪里”。这就意味着文字不再只是 DOM 里的内容,而是变成了可被程序路由的东西。

2. 它不是只优化高度预测,而是在打开自定义排版

README 里列得很直白:它支持 DOM、Canvas、SVG,未来还准备支持 server-side。也就是说,Pretext 不是只想做“测量优化”,而是想成为手动布局文本的底层能力。比如:

这也是为什么官方 demo 给人的感觉不是“一个更快的工具库”,而是“浏览器忽然拥有了新的设计语言”。

3. 它把文本能力从 CSS 委员会节奏里解放了一部分

Cheng Lou 在自己的 thoughts 里写得很直白:如果 userland 对文本有更强控制力,很多 CSS 规范复杂度其实都可以不必继续膨胀。这个判断我非常认同。过去很多布局表达力之所以难,不是因为渲染做不到,而是文本仍然被关在浏览器原生布局黑箱里;你一旦想“拿回控制权”,就会立刻遇到性能与准确性问题。

Pretext 的战略意义就在这:它不是在扩充 CSS,而是在告诉大家,有一类文本布局能力,其实可以下放到 userland,并且性能还足够好。

Pretext 厉害在哪里?我觉得核心有五层

第一层:把最贵的问题换了个位置

很多系统优化失败,不是算法不够巧,而是把昂贵工作放在了交互热路径里。Pretext 最关键的设计不是“怎样更准”,而是先把问题重构成:一次准备、多次便宜重算。这个思想跟很多现代系统工程非常像——不是局部提速,而是重排成本结构。

第二层:它没有为了快,牺牲国际化

这点非常关键。很多文本相关库一旦强调性能,就会默默退化为“英文 + 拉丁字母 + 少量 emoji”的世界。但 Pretext 明确做了大量 i18n 工作:用 Intl.Segmenter 处理 CJK、Thai、Arabic 等脚本;为 bidi、emoji、软连字符、tab、preserved spaces、不同脚本的标点黏连做了大量工程修补;并维护了跨 Chrome / Safari / Firefox 的浏览器精度基线。

它的 research log 里最打动我的一点,是它不是靠“一套聪明公式”赢,而是非常老实地围绕浏览器行为做长期校准:哪些方法试过但失败、哪些脚本是 canary、哪些 browser-specific shim 值得保留、哪些看起来优雅但会拖慢热路径的方案必须回滚。

第三层:它把“文本测量”变成了 AI 友好的能力

这件事很多人可能还没意识到。现在 AI coding 最容易做出来的是“看起来像页面”的东西,最难做的是“真正把交互细节、空间关系、文本约束处理对”。Pretext 让很多文本相关判断不再依赖浏览器黑盒试错,而可以直接在代码与计算层面完成,比如:

这会极大提升“模型生成 UI → 自动验证 → 自动修正”的闭环质量。换句话说,Pretext 不只是前端工程提效工具,也是未来 agent 做设计实现时的一块新地基。

第四层:它打开的是一整类新 UI,不是单个组件

好的基础设施常见的标志,不是“它自己很强”,而是“它让很多此前不值得做的东西变得值得做”。Pretext 正是这样。它 unlock 的不是一个聊天气泡、一个排版 demo,而是一整类以前因性能/复杂度被压住的界面形式:

方向以前为什么难有了 Pretext 之后
编辑型 / 杂志型布局文字绕图、分栏、动态重排太依赖 DOM 试错可以按行路由文本,实时流动
聊天 / 卡片系统高度预测不准,虚拟列表和锚点恢复容易抖先算高度再渲染,滚动更稳
富文本控件inline tag / chip / code 很难和自然换行兼容可以把文本行作为一等对象处理
Canvas / SVG / WebGL 文本浏览器原生文本布局不直接暴露给这些渲染层可以手动拿到 line data 去画
Agent 生成 UI模型能拼页面,但难处理真实文本约束可以把文本布局纳入自动验证循环

第五层:它其实在逼问浏览器的一条边界

Pretext 让我强烈感受到的一点是:前端过去很少把“文字”当作一个可编排的几何系统来对待。图形、动画、粒子、3D、shader,大家已经很习惯自己接管;但一到文本,马上又退回 DOM/CSS 默认流。Pretext 某种意义上是在挑战这个默认:如果我们能自己拿到足够接近浏览器真值的文本几何能力,浏览器上的 UI 创作边界会往外推很多。

但它也不是魔法,它的边界非常清楚

这恰恰也是我喜欢它的地方:它不是一个乱许愿的项目,而是非常诚实地定义了自己的适用面。

这意味着,Pretext 更像是一个高价值的“中间层引擎”:介于浏览器原生黑箱和全自研渲染栈之间。这个位置其实非常聪明,因为它不需要把整个问题吃下来,就已经足以改写很多场景的成本结构。

如果文字渲染能力真的提速这么多,会对哪些领域产生重大影响?

我觉得最值得看的,不是“现在已有谁能用”,而是“哪些原本被文字拖慢的系统,会因此换一种设计方式”。

1. 聊天、社区、信息流产品

这是最直接的一层。消息列表、评论楼、卡片流、瀑布流、本质上都是“海量文本块 + 动态宽度 + 滚动稳定性”的问题。如果高度能在渲染前准确得出,就意味着:

2. AI 生成页面与 agent 自动实现

未来 AI 做网页,最常见的问题之一其实不是“不会写 HTML”,而是“不会处理动态内容进入后真实会发生什么”。标题长一点、按钮文案变了、语言切到德语、卡片里塞了一个 badge,页面就全乱了。Pretext 会把一部分这类问题从“等页面渲染出来再看”变成“在生成和验证阶段就能算”。这会让 agent 的 UI 自修复能力大幅增强。

3. 在线阅读、知识产品、富文档体验

今天 Web 上很多文档系统本质上还是一条标准长文流。不是因为设计师没想法,而是复杂排版的工程成本过高。Pretext 一旦成熟,真正有机会影响的,是 Web 端的“轻编辑型阅读体验”:障碍物绕排、可视化批注、动态摘要块、图文混排、可折叠注释、响应式多栏等。

4. 浏览器里的游戏 UI 与叙事系统

这个方向我觉得被低估了。很多游戏 UI 的底层痛点并不是 shader,而是文字:对白框、状态栏、日志、技能描述、任务树、tooltip、对话分支、动态气泡、聊天室、世界说明。这些一旦能用更低成本实时布局,游戏叙事层的表现力会明显提升。尤其在浏览器环境里,这是一块长期被“DOM 不适合、Canvas 不方便、自己做太贵”夹住的区域。

5. 设计工具与前端生产工具

从 Figma-like 设计工具,到可视化搭建器、智能排版助手、演示文稿工具、简报生成器,凡是需要“先知道文本几何,再决定其他对象怎么摆”的系统,都会受益。因为文字一旦可以被稳定测量,很多布局决策就可以前移,不再是结果导向的补丁。

最有意思的延伸:如果把 MUD 和这种动态图形渲染结合,会发生什么?

你提到的这个想法,我觉得非常有感觉,而且不只是“有趣”,是有潜力形成一类新的浏览器原生媒介。

MUD 本质上是高度依赖文字的交互世界:房间、物品、状态、动作、叙事、社交,全都在文本里展开。它的强大之处,是状态空间巨大、世界响应快、内容生产成本低;它的弱点,是视觉回报太弱,所以很多现代用户进不去。

而 Pretext 这一类能力,恰好在补 MUD 的另一半:不是替代文字,而是让文字和动态图形开始更紧地耦合。

一个我能想象的形态:Text-native 世界,而不是 text with images

过去很多“文字游戏 + 图像”尝试,实际上只是给文本套一层插画外壳。真正有意思的方向,是让图像、空间、粒子、动态 UI 都从文本状态里实时长出来。比如:

这会带来三种新的体验跃迁

  1. 叙事密度不降,但视觉回报显著提升。 传统图像游戏往往为了图像生产成本牺牲叙事分辨率;MUD 相反,叙事很强但视觉反馈弱。两者结合后,有机会把“语言的高自由度”与“图形的即时反馈”接起来。
  2. 世界会更 live,而不是一页页切换。 因为文字布局足够快,你可以让界面在每次输入、每次世界状态变化后持续重组,而不是停留在表单式 prompt-response。
  3. 浏览器会成为 text-native interactive fiction 的最佳载体。 它天然有字体、输入、滚动、Canvas、SVG、WebGL、网络连接、多人交互。缺的恰恰只是“把文本当一等图形对象”的中间层。
如果说传统 MUD 是“用文字描述世界”,那下一代浏览器文本世界,可能会变成“文字本身就是世界的可视化材质”。

这件事对 AI 也很重要。因为 AI 最擅长生成的就是文本状态、叙事分支、世界反馈和多角色对话。如果浏览器端已经有一套足够强的文字图形化能力,那么 AI 可以天然成为这种新媒介的“世界驱动器”。你可以想象一个形态:LLM 负责世界状态与事件推进,前端文本引擎负责把这些状态实时变成可交互、可观看、可流动的视觉叙事场。

我自己的判断:Pretext 不是“一个新库”,更像一个信号

它发出的信号大概是这样的:

  1. 浏览器里文字排版这层能力,开始从被动依赖原生布局,转向主动可编排。
  2. Web UI 的表达力,接下来可能不是主要靠更多 CSS 属性增长,而是靠 userland 引擎化能力增长。
  3. 一旦文本几何变得廉价、准确、实时,很多“以前不值当做”的交互与媒介形式会重新被发明。

所以我觉得,Pretext 最值得关注的,不只是它现在已经做出来的那几个 demo,而是它背后那条更长的路线:文字正在从“内容”重新变成“可计算、可组合、可驱动其它系统的基础对象”。

而一旦这件事成立,受影响的就不只是前端性能,而是前端创作边界、AI UI 自动化、浏览器叙事系统,以及一类 text-native 新产品的出现。

参考来源