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% 准确率 的解决方案已然出现,可直接集成使用,显著提升相关应用的性能与体验。

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


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

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

(0)
上一篇 2小时前
下一篇 2小时前

相关推荐

  • 30B参数开源模型UniScientist:实现自主科研闭环,将开放式问题转化为可验证单元测试

    30B参数开源模型UniScientist:实现自主科研闭环,将开放式问题转化为可验证单元测试(1/2) 当前许多大语言模型能够生成看似专业的论文,但其“科研能力”往往停留在表面——它们擅长模仿格式、排列逻辑和引用文献,却难以进行严谨、可验证的科学推理。模型常陷入“叙事推理”的陷阱,结论缺乏稳固的证据支撑,可复现性弱。 近期,UniPat AI团队发布了一个…

    2026年3月9日
    21200
  • JumpServer:12年开源堡垒机进化史,3万Star背后的企业级安全守护

    JumpServer:12年开源堡垒机进化史,3万Star背后的企业级安全守护 3万Star。 在国内企业级开源项目里,这是一个屈指可数的成就。 今天介绍的开源项目是 JumpServer。 这是一个开源的堡垒机,也是一个特权访问管理平台(PAM)。它通过浏览器为运维和开发团队提供安全的SSH、RDP、Kubernetes、数据库访问,并自带权限管控与全程审…

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

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

    2026年2月26日
    1.5K00
  • MiroThinker:开源重型研究型AI Agent,让小龙虾帮你完成深度调研

    在处理需要深度搜索、多方对比与交叉验证才能得出体系化结论的复杂任务时,我会使用 MiroThinker。 这是一个开源的重型研究型 AI Agent。与常规的问答式聊天机器人不同,MiroThinker 能够进行持续的长链推理、主动浏览网页、在不确定环境中进行探索,最终生成一份扎实的研究报告。 它已成为我高频使用的 AI 工具之一。此前,我已在飞书中配置了名…

    2026年3月19日
    21900
  • 解锁自动化新境界:n8n与飞书多维表格的完美融合,打造高效工作流

    解锁自动化新境界:n8n与飞书多维表格的完美融合,打造高效工作流 在利用开源工作流工具 n8n 构建自动化流程时,数据的归档与存储是关键环节。飞书多维表格为此提供了一个优秀的解决方案。它不仅可作为结构化数据的中转站,更能借助其「字段捷径」功能,与 AI 处理或后续自动化流程无缝衔接,实现效率的倍增。 值得一提的是,飞书多维表格现已支持网页端直接访问(base…

    2025年11月7日
    82700