Pretext:纯JS文本测量库,3天Star超21.9K,性能提升200倍!

最近,前端社区中一个名为 Pretext开源项目引起了广泛关注。

该项目由前 React 核心开发者 Cheng Lou 创建,他曾主导开发过 Star 数达 21.9K 的 react-motion。此次推出的 Pretext 在发布仅 3 天后,其 Star 数量便已超越 react-motion。

Pretext:纯JS文本测量库,3天Star超21.9K,性能提升200倍!

项目在海外社交平台热度颇高,相关推文获得超 1600 万浏览与 6.4 万点赞,讨论帖超过 6.8 万条。目前,这股热度已蔓延至国内技术社区。

1. 项目简介

Pretext:纯JS文本测量库,3天Star超21.9K,性能提升200倍!

Pretext 是一个纯 JavaScript/TypeScript 实现的多行文本测量与布局库。

其核心目标是:在不接触 DOM 的前提下,精确计算出给定宽度下多行文本的渲染高度。

下方演示视频展示了基于该库实现的网页效果,文本布局与高度预测极为流畅。

项目地址:https://github.com/chenglou/pretext

2. 核心优势

多行文本的精确布局在 Web 开发中是一个存在近三十年的难题。传统方案依赖于 getBoundingClientRectoffsetHeight 等 DOM API,这些操作会触发浏览器重排,性能开销巨大。在虚拟滚动列表、聊天界面、瀑布流等需要频繁测量文本高度的场景中,性能瓶颈尤为突出。

Pretext 目前已收获超过 3.4 万 Star,体积仅 15 KB,其设计颇具巧思。

两阶段架构,性能提升显著

Pretext 将测量过程拆分为两个阶段:
1. 准备阶段 prepare(text, font):进行分词、双向文本处理,并利用 Canvas measureText 测量每个文本片段的宽度并缓存。此步骤稍重,处理 500 段文本约需 19 ms。
2. 布局阶段 layout(prepared, maxWidth, lineHeight):基于缓存的宽度进行纯数学计算,确定换行后的总高度。此步骤极轻,500 段文本仅需 0.09 ms。

关键优势:当容器宽度改变时,只需重新执行第二阶段。由于准备阶段的缓存依然有效,仅通过数学计算即可获得新高度,性能相比传统 DOM 测量提升 200 倍以上

全语言支持与 100% 准确率

该库不仅支持英文,对中文、日文、韩文等复杂文字同样能够正确处理。在 Chrome、Safari、Firefox 三大浏览器上的测试准确率均达到 7680/7680,即 100%。实现全语言文本的精确测量与布局难度极高,这也是项目发布后迅速获得大量关注的原因之一。

Pretext:纯JS文本测量库,3天Star超21.9K,性能提升200倍!

3. 应用场景

场景一:预测文本高度

无需操作 DOM 即可获取精确的文本高度。适用于:
– 虚拟滚动列表
– 瀑布流布局
– 聊天气泡的自适应宽度(shrink-wrap)
– 防止布局偏移(CLS)

场景二:手动逐行布局

可获取每行文本的精确坐标与内容,进而渲染到 Canvas、SVG 或 WebGL 上。借此可实现高级效果,例如:
– 文字绕障碍物流动
– 流体烟雾 ASCII 艺术
– 摄像头追踪人脸时的文字避让
– 物理球碰撞改变文字排列
– 马里奥游戏 ASCII 文字版

AI 辅助开发的典范

开发者 Cheng Lou 在项目开发中大量使用了 Claude Code 和 Codex 等 AI 编程工具。他让 AI 在数十种容器宽度下对比浏览器真实渲染结果,并自动修正差异。该方法在 Hacker News 上被广泛讨论,被认为是 AI 辅助编程的完美范例。Simon Willison 也专门撰文推荐,特别称赞了其采用整本《了不起的盖茨比》进行跨浏览器对比的测试方法。

4. 快速上手

安装

bash
npm install @chenglou/pretext

或使用 bun:
bash
bun add @chenglou/pretext

基础用法:预测文本高度

“`javascript
import { prepare, layout } from ‘@chenglou/pretext’

const prepared = prepare(‘AGI 春天到了. بدأت الرحلة 🚀’, ’16px Inter’)
const { height, lineCount } = layout(prepared, textWidth, 20)
// height 即为精确的像素高度,全程未接触 DOM
“`

高级用法:手动逐行布局

“`javascript
import { prepareWithSegments, layoutWithLines } from ‘@chenglou/pretext’

const prepared = prepareWithSegments(‘一些文本’, ’18px “Helvetica Neue”‘)
const { lines } = layoutWithLines(prepared, 320, 26)

for (let i = 0; i < lines.length; i++) {
ctx.fillText(lines[i].text, 0, i * 26)
}
“`

本地运行 Demo

bash
git clone https://github.com/chenglou/pretext.git
cd pretext
bun install
bun start

随后在浏览器中访问 http://127.0.0.1:3000/demos 即可查看示例。

5. 总结

Pretext 提供了 不依赖 DOM 即可预测文本高度 的能力。对于虚拟滚动、瀑布流、聊天界面等常见场景,以往开发者要么承受性能代价进行测量,要么使用估算值妥协。如今,一个 15 KB、零依赖、100% 准确率 的解决方案已然出现,可直接集成使用,显著提升相关应用的性能与体验。


关注“鲸栖”小程序,掌握最新AI资讯

本文来自网络搜集,不代表鲸林向海立场,如有侵权,联系删除。转载请注明出处:http://www.itsolotime.com/archives/28940

(0)
上一篇 2026年4月7日 上午10:58
下一篇 2026年4月7日 上午11:03

相关推荐

  • 五天五版本!OpenClaw(龙虾)AI助手火力全开,记忆系统重构、安全加固、视频生成密集迭代

    五天五版本:OpenClaw AI 助手密集迭代,重构记忆与安全防线 很少见到将更新日期作为版本号的 AI 框架,OpenClaw(龙虾)便是其中之一。 在短短五天内,从 v2026.4.7 到 v2026.4.11,这款开源个人 AI 助手在 GitHub 上完成了一轮“火力全开”的密集迭代。记忆系统重构、安全加固、视频生成接入、本地语音推理……几乎每个版…

    2026年4月12日
    69900
  • 仅3B参数超越GPT-5.2!腾讯混元团队HiVG:重新定义SVG生成的token设计范式

    腾讯混元团队提出HiVG:重新定义SVG生成的Token设计范式 当业界普遍追求扩大模型规模时,一项研究转换了思路:与其无限堆叠参数,不如从根本上重新思考“如何为SVG设计Token”。 仅3B参数的HiVG模型,在SVG生成任务的多项指标上超越了GPT-5.2、Claude-4.5-Sonnet等闭源模型。 核心摘要:HiVG是一个面向SVG生成的层次化分…

    2026年4月10日
    24400
  • GitNexus:为AI编程助手装上“代码透视眼”,彻底告别瞎改代码时代

    如今的开发工具,正从早期的简单代码补全,向能够自主工作的智能体(Agent)方向快速演进。 诸如 Cursor 和 Claude Code 等 AI 编程助手,已成为许多开发者日常必备的工具。 然而,使用 AI 辅助编程时,一个令人头疼的问题是:刚刚修复了一个 Bug,却可能在意想不到的地方引入三个新的 Bug。 其根本原因在于,当前的 AI 编程助手普遍缺…

    2026年2月26日
    1.8K00
  • LeRobot v0.5.0重磅发布:全面支持类人机器人Unitree G1,硬件生态与算法能力双突破

    自 v0.4.0 版本以来,项目已合并超过 200 个 PR,并新增了 50 多位贡献者。因此,LeRobot v0.5.0 成为迄今为止规模最大的一次发布,在几乎所有关键方向上都实现了显著扩展:支持更多机器人(包括首个类人机器人)、集成更多策略模型(包括回归的自回归 VLA)、提供更快的数据集处理流程、支持直接从 Hub 加载的仿真环境,以及基于 Pyth…

    2026年3月11日
    68901
  • 阿里重磅开源Copaw:2026年AI智能助手格局或将重塑

    2026年2月28日,阿里云官方宣布,由阿里巴巴AgentScope团队自主研发的桌面级AI智能助手Copaw正式开源,其GitHub仓库与官方文档同步上线。 此举打破了国内高端AI智能助手长期存在的闭源格局,并以“低门槛部署、高可扩展性、全场景适配”为核心特点,为个人与企业级AI智能体的发展提供了新的路径。作为阿里在AI Agent领域的关键布局,Copa…

    2026年3月1日
    1.3K00