惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Archives - TechRepublic
Security Archives - TechRepublic
W
WeLiveSecurity
Hacker News: Ask HN
Hacker News: Ask HN
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
H
Heimdal Security Blog
Help Net Security
Help Net Security
T
Troy Hunt's Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
N
News | PayPal Newsroom
TaoSecurity Blog
TaoSecurity Blog
T
Threat Research - Cisco Blogs
NISL@THU
NISL@THU
G
GRAHAM CLULEY
S
Security @ Cisco Blogs
The Hacker News
The Hacker News
SecWiki News
SecWiki News
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Simon Willison's Weblog
Simon Willison's Weblog
C
Cisco Blogs
A
Arctic Wolf
S
Securelist
Hacker News - Newest:
Hacker News - Newest: "LLM"
AI
AI
N
News and Events Feed by Topic
L
LINUX DO - 热门话题
P
Privacy & Cybersecurity Law Blog
Google Online Security Blog
Google Online Security Blog
T
The Exploit Database - CXSecurity.com
The Last Watchdog
The Last Watchdog
S
Secure Thoughts
Webroot Blog
Webroot Blog
Scott Helme
Scott Helme
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Cisco Talos Blog
Cisco Talos Blog
S
Schneier on Security
Latest news
Latest news
T
Threatpost
K
Kaspersky official blog
Know Your Adversary
Know Your Adversary
Schneier on Security
Schneier on Security
I
Intezer
PCI Perspectives
PCI Perspectives
S
Security Affairs
爱范儿
爱范儿
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

博客园 - 刘俊涛的博客

qoder-体验分享 50+专家角色+多代理框架,一个人就能建起一支AI 公司 小米突然放大招!2亿 Token 免费领,最后几天冲刺! 通用商品打标模块实现方案(基于位运算,适配多框架多语言) 后端工程中使用 Model + Trait 设计可复用的数据模型(完整实现示例) 最小阻力之路 U盘打不开 : 文件损坏 : 提示需要格式化?用CHKDSK轻松修复教程 祂看顧麻雀(His Eye Is on the Sparrow)鄭漢良 别再把一切都变成数组了:用迭代器让 JavaScript 既快又省心 Spark性能调优实战笔记 Spark神操作:轻松拿捏公司“历史烂数据”,一人干翻十年脏表 特定血型血液生成的研究进展:化学合成与微生物生产技术路线 禁止直接 update 业务关键字段 非暴力沟通 PHP 8.1+ 引入的 枚举(Enum) 类型 PHP 8.5 新特性速览:管道操作符、clone with、闭包增强与更多实用功能 从错误中学习 产品拆解到底怎么做?8步框架,新手产品经理必学干货! 《创作与爱:托芙·扬松传》读书笔记 MongoDB 端口安全加固方案 为什么软件反应特别慢?一次因版本架构错误导致的性能问题排查记录 【Go 语言神器】iota 到底是什么?为什么高手都爱用它?
这个项目把浏览器“干了30年的事”干掉了:Pretext 为什么突然爆火?
刘俊涛的博客 · 2026-04-08 · via 博客园 - 刘俊涛的博客

** 这个项目把浏览器“干了30年的事”干掉了:Pretext 为什么突然爆火?**

最近在 GitHub 上,一个叫 Pretext 的项目悄悄冲上热榜:

Pretext:https://github.com/chenglou/pretext

作者:Cheng Lou(React 核心成员 / Midjourney 工程师)

很多人第一眼看不懂它在干嘛,但越看越觉得:

❗这不是优化,这是在“改写前端底层规则”

PixPin_2026-03-31_18-02-41


一、先说结论:它干掉了什么?

一句话:

Pretext 把“文本布局”从浏览器 DOM 里拿了出来,变成纯 JavaScript 计算。

也就是说:

以前:
文本怎么换行?多高? → 浏览器说了算(黑盒)

现在:
文本怎么排?多高? → 你自己算(可控)

这件事为什么重要?

因为它解决了一个所有前端都痛苦过的问题

❓“这段文字渲染后到底有多高?”


二、项目背景:一个被忽略 30 年的底层问题

在 Web 世界里,文本布局一直是浏览器负责的:

  • 换行(line break)
  • 行高(line height)
  • 高度计算(height)
  • 字体度量(font metrics)

但问题是:

❌ 你无法“提前知道结果”

你必须:

div.innerText = text
const h = div.offsetHeight // ❗强制触发 reflow

这会带来一堆经典问题:

  • 页面卡顿(layout thrashing)
  • 虚拟列表高度不准
  • SSR hydration mismatch
  • 聊天 UI 抖动
  • Canvas 无法自动排版

本质问题:

布局是“副作用”,不是“函数”


三、Pretext 做了什么(核心设计)

Pretext 的思路很简单,但极其颠覆:

✅ 用 JS 自己实现一套“文本排版引擎”

核心能力:

layout(text, width) => {
  lines: [...],
  height: number
}

它内部做了:

  • Canvas.measureText(获取字体宽度)
  • 分词(支持 emoji / CJK)
  • 自动换行算法
  • 行高计算
  • 缓存优化

** 关键突破:变成“纯函数”**

// 无副作用
const result = layout("Hello world", 300)

这意味着:

  • ❌ 不需要 DOM
  • ❌ 不触发 reflow
  • ❌ 不依赖浏览器渲染

直接得到布局结果


四、它解决了哪些核心问题?

这部分是它能爆的真正原因


1️⃣ 彻底消灭 reflow 带来的性能问题

传统流程:

render → measure → re-render → 再测

Pretext:

compute once → render

官方数据:300~600x faster than DOM


2️⃣ 虚拟列表终于可以“精准预测高度”

以前:

  • 只能估算
  • 滚动抖动

现在:

const h = layout(text, width).height

完全可预测


3️⃣ Canvas / WebGL 文本排版不再是噩梦

Canvas 最大问题:

❌ 不会自动换行

现在:

Pretext 直接给你每一行


4️⃣ AI UI 的关键基础设施

比如你熟悉的:

  • ChatGPT 流式输出
  • token-by-token 渲染
  • 动态内容增长

Pretext 可以:

  • 实时计算布局
  • 无抖动更新 UI

5️⃣ SSR / Edge 渲染能力提升

因为它是纯函数:

  • 可以在 Node 运行
  • 可以在 Worker 运行
  • 可以提前计算布局

SSR 精准到像素级

五、为什么它会在 GitHub 爆火?

不是因为功能多,而是这几点

⭐ 1. 打破行业默认前提

文本布局 = 浏览器负责 ❌
文本布局 = JS 可以做 ✅

这是“范式级改变”


⭐ 2. 命中所有前端的痛点

  • 聊天 UI
  • 动态高度
  • 虚拟滚动
  • 富文本

几乎人人踩过坑

⭐ 3. 工程质量很高

  • 清晰分层(prepare / layout)
  • 缓存机制
  • 可复用设计

不是 demo,是“基础设施级代码”


⭐ 4. 作者本身影响力

Cheng Lou

  • React 核心开发者
  • Midjourney 工程师

社区信任度极高


六、一个最直观 Demo(你一看就懂)

** 场景:计算一段文本高度(不依赖 DOM)**

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

性能差 + 不可控


七、一个更实用 Demo(聊天气泡)

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) // 直接拿高度

用于:

  • 聊天 UI
  • 虚拟列表
  • 滚动优化

八、它在前端架构中的位置

可以这样理解:

以前:
React → DOM → Layout(黑盒)

现在:
React → Pretext → DOM(只负责渲染)

DOM 从“计算引擎”变成“展示层”


九、适用场景(很关键)

✅ 强烈推荐

  • Electron 应用(桌面软件)
  • AI Chat UI
  • 虚拟列表
  • Canvas / WebGL
  • 富文本编辑器

❌ 不适合

  • 普通后台系统
  • 静态页面
  • 简单表单

用了反而复杂


Pretext 的本质,是把“浏览器黑盒排版”变成“可控的纯函数系统”。

或者更狠一点:

DOM Layout → Userland Layout Engine

这个项目不是在优化前端,而是在重新定义“前端谁说了算”。