


























最近在 GitHub 上,一个叫 Pretext 的项目悄悄冲上热榜:
Pretext:https://github.com/chenglou/pretext
作者:Cheng Lou(React 核心成员 / Midjourney 工程师)
很多人第一眼看不懂它在干嘛,但越看越觉得:
❗这不是优化,这是在“改写前端底层规则”

一句话:
Pretext 把“文本布局”从浏览器 DOM 里拿了出来,变成纯 JavaScript 计算。
也就是说:
以前:
文本怎么换行?多高? → 浏览器说了算(黑盒)
现在:
文本怎么排?多高? → 你自己算(可控)
这件事为什么重要?
因为它解决了一个所有前端都痛苦过的问题:
❓“这段文字渲染后到底有多高?”
在 Web 世界里,文本布局一直是浏览器负责的:
但问题是:
你必须:
div.innerText = text
const h = div.offsetHeight // ❗强制触发 reflow
这会带来一堆经典问题:
本质问题:
布局是“副作用”,不是“函数”
Pretext 的思路很简单,但极其颠覆:
核心能力:
layout(text, width) => {
lines: [...],
height: number
}
它内部做了:
// 无副作用
const result = layout("Hello world", 300)
这意味着:
直接得到布局结果
这部分是它能爆的真正原因
传统流程:
render → measure → re-render → 再测
Pretext:
compute once → render
官方数据:300~600x faster than DOM
以前:
现在:
const h = layout(text, width).height
完全可预测
Canvas 最大问题:
❌ 不会自动换行
现在:
Pretext 直接给你每一行
比如你熟悉的:
Pretext 可以:
因为它是纯函数:
SSR 精准到像素级
不是因为功能多,而是这几点
文本布局 = 浏览器负责 ❌
文本布局 = JS 可以做 ✅
这是“范式级改变”
几乎人人踩过坑
不是 demo,是“基础设施级代码”
Cheng Lou
社区信任度极高
import { prepare, layout } from "pretext"
// Step 1: 预处理(可缓存)
const prepared = prepare({
text: "这是一段很长很长的文本,用来测试自动换行效果",
font: "16px Arial",
})
// Step 2: 布局计算
const result = layout(prepared, {
width: 200,
})
// 输出
console.log(result.height)
console.log(result.lines)
const div = document.createElement("div")
div.style.width = "200px"
div.innerText = text
document.body.appendChild(div)
const height = div.offsetHeight // ❗触发 reflow
性能差 + 不可控
function measureMessage(text) {
const prepared = prepare({
text,
font: "14px system-ui",
})
return layout(prepared, { width: 240 })
}
// 使用
const msg = measureMessage("Hello Pretext!")
console.log(msg.height) // 直接拿高度
用于:
可以这样理解:
以前:
React → DOM → Layout(黑盒)
现在:
React → Pretext → DOM(只负责渲染)
DOM 从“计算引擎”变成“展示层”
用了反而复杂
Pretext 的本质,是把“浏览器黑盒排版”变成“可控的纯函数系统”。
或者更狠一点:
DOM Layout → Userland Layout Engine
这个项目不是在优化前端,而是在重新定义“前端谁说了算”。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。