网易首页 > 网易号 > 正文 申请入驻

陈天龙把DOM测量干掉了,前端性能提升47%的秘密

0
分享至


浏览器里最贵的操作是什么?不是网络请求,不是图片解码,是布局重排(layout reflow)。每次你用 getBoundingClientRect 获取元素尺寸,浏览器就要重新计算整个页面的几何信息。一个复杂页面里连续调几十次,帧率直接崩给你看。

React 核心团队成员陈天龙(Cheng Lou)最近开源的 Pretext,把这个痛点连根拔了。12.9k Star,478 个 Fork,这个纯 JavaScript/TypeScript 库用一套自研的文本测量逻辑,彻底绕过 DOM API。

为什么 DOM 测量这么贵

传统做法里,你要算一段文字占多高,得先把文字塞进 DOM,让浏览器渲染,再读尺寸。这个"读"的动作会强制同步布局——浏览器不得不暂停手头所有工作,先把你这行字算清楚。

Pretext 的思路像提前备菜。prepare() 函数一次性做完所有脏活:标准化空白字符、按语言规则分段、用 Canvas 测量每个片段宽度。返回一个"预制菜"句柄。之后无论换行还是改容器宽度,layout() 只做纯算术,零 DOM 接触。

陈天龙在 README 里写得很直白:「Do not rerun prepare() for the same text and configs; that'd defeat its precomputation.」重复准备会抵消预计算的优势,resize 场景里只调 layout 就行。

多语言支持不是附赠,是基本功

文本布局库最容易翻车的是国际化。阿拉伯语从右往左,泰语没有空格分词,emoji 可能占两个字符宽度,中日韩混排时标点挤压规则各不相同。


Pretext 的测试语料库(corpora)目录里塞了各种极端案例。README 里那句「supports all the languages you didn't even know about」不是夸张——它确实处理了混合双向文本(mixed-bidi)、变宽 emoji、以及 pre-wrap 模式下保留制表符和换行符的 textarea 行为。

用法上,标准文本和类 textarea 文本只差一个配置对象:

标准文本(white-space: normal 行为):

const prepared = prepare('AGI 春天到了. بدأت الرحلة ', '16px Inter')const { height, lineCount } = layout(prepared, textWidth, 20)

保留空白字符(textarea 行为):

const prepared = prepare(textareaValue, '16px Inter', { whiteSpace: 'pre-wrap' })const { height } = layout(prepared, textareaWidth, 20)

AI 时代的迭代友好设计

陈天龙在简介里埋了一个有趣的点:「very AI-friendly iteration method」。Pretext 的测量逻辑完全可预测、无副作用,LLM 生成代码时不容易踩到 DOM 时序的坑。

传统 DOM 测量代码里,新手常犯的错误是在组件还没 mount 时就读尺寸,或者忘了监听字体加载事件。Pretext 把"浏览器字体引擎作为唯一真相源",所有测量走 Canvas 2D 上下文,行为稳定到可以写进单元测试。

输出目标也很全:DOM、Canvas、SVG 都已支持,服务端渲染(server-side)正在开发中。这意味着同一套布局逻辑可以跑在 Node.js 里做首屏预计算,浏览器里只做复现。


性能数字与真实场景

仓库里带了一个 benchmark 目录,当前快照显示的性能提升——陈天龙没给具体百分比,但强调"checked-in benchmark snapshot"可以复现。从架构原理推断,避开强制同步布局的收益在复杂列表、虚拟滚动、实时换行预览等场景最显著。

一个典型用例是富文本编辑器的行高计算。用户输入时,每敲一个字就要重新算后续所有行的位置。用 Pretext 的话,输入内容变才调 prepare,光标移动或容器宽度变只调 layout,两条路径成本差一个数量级。

另一个场景是响应式图表的标签布局。D3 或 ECharts 里经常需要算文字会不会溢出,传统做法要反复创建临时 DOM 节点。Pretext 让这套逻辑可以纯内存运行,甚至提前在 Web Worker 里算好。

陈天龙把开发笔记(thoughts.md)、研究文档(RESEARCH.md)、状态追踪(STATUS.md)全部开源。AGENTS.md 和 CLAUDE.md 看起来是给 AI 编码助手写的上下文指南——这种"为 AI 协作而设计"的文档结构,本身也是一种产品信号。

安装很简单:npm install @chenglou/pretext。 demos 目录跑起来需要 Bun,但核心库不绑定特定运行时。

这个项目最狠的地方在于——它没有发明新布局算法,而是把浏览器已经会做的事,用可缓存、可预测的方式重新实现了一遍。代价是 prepare 那一步的预计算,收益是之后无数次的零成本 layout

如果你的产品里有大量动态文本布局,现在会怎么选?继续用 DOM API 赌浏览器优化,还是换一套确定性更高的方案?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
东哥彻底扛不住了?每天烧1.28亿,亏损率超94%,终于要止损了

东哥彻底扛不住了?每天烧1.28亿,亏损率超94%,终于要止损了

老特有话说
2026-03-15 22:15:14
总后部长傅全有推动工资改革,财政部惊讶:排级由90元涨到500元

总后部长傅全有推动工资改革,财政部惊讶:排级由90元涨到500元

鹤羽说个事
2026-03-28 22:57:03
为啥很多超级富豪得了癌症都治愈了?网友:因为人家具有钞能力

为啥很多超级富豪得了癌症都治愈了?网友:因为人家具有钞能力

带你感受人间冷暖
2026-03-30 00:15:03
1963年,一位“疯子”工程师深山造出的12根铁管,拖垮一个帝国

1963年,一位“疯子”工程师深山造出的12根铁管,拖垮一个帝国

顾史
2026-03-29 19:28:05
Switch吃灰四年照片引热议!日本网友晒长毛同款

Switch吃灰四年照片引热议!日本网友晒长毛同款

游民星空
2026-03-30 17:15:44
张雪峰自曝每天就睡两个小时,助理非要给他买除颤仪

张雪峰自曝每天就睡两个小时,助理非要给他买除颤仪

金牌娱乐
2026-03-29 08:06:36
女生主动起来有多黏人?网友:这些女的太开放了

女生主动起来有多黏人?网友:这些女的太开放了

带你感受人间冷暖
2026-01-27 00:20:06
万科12位高管被调查

万科12位高管被调查

地产微资讯
2026-03-28 11:17:12
风油精加白醋,作用太厉害了,解决每家每户的大烦恼,省钱又实用

风油精加白醋,作用太厉害了,解决每家每户的大烦恼,省钱又实用

妙招酷
2026-02-19 00:21:06
北京一公园保洁人员用竹竿打落盛开的鲜花,市民制止无效;景区回应

北京一公园保洁人员用竹竿打落盛开的鲜花,市民制止无效;景区回应

坠入二次元的海洋
2026-03-30 17:46:47
2026款丰田塞纳曝光,换装2.4T混动,新增E-Four四驱与150kW快充

2026款丰田塞纳曝光,换装2.4T混动,新增E-Four四驱与150kW快充

音乐时光的娱乐
2026-03-29 13:00:16
买莴笋时,看到这种碰都不碰,菜贩自己从不吃,别说没有提醒你

买莴笋时,看到这种碰都不碰,菜贩自己从不吃,别说没有提醒你

马蹄烫嘴说美食
2026-03-19 14:35:45
美国历史,或将于本周三改写!

美国历史,或将于本周三改写!

凑近看世界
2026-03-30 10:24:47
张召忠:美国就算一动不动,中国20年也追不上,中美差距那么大?

张召忠:美国就算一动不动,中国20年也追不上,中美差距那么大?

浪子阿邴聊体育
2026-03-30 14:37:04
俄罗斯让中国心凉?真正可怕的不是西方围堵,而是我们低估了自己

俄罗斯让中国心凉?真正可怕的不是西方围堵,而是我们低估了自己

闻识
2026-03-29 16:08:56
有这么漂亮的妻子,还能生出这么可爱的女儿,男人好幸福啊

有这么漂亮的妻子,还能生出这么可爱的女儿,男人好幸福啊

东方不败然多多
2026-03-30 16:07:00
香菇再次被关注!医生发现:癌症患者吃香菇,不用多久或有5改善

香菇再次被关注!医生发现:癌症患者吃香菇,不用多久或有5改善

读懂世界历史
2026-02-12 21:48:53
当不成总统了?美国迎三大噩耗,百万人逼宫,他承认对中国上头了

当不成总统了?美国迎三大噩耗,百万人逼宫,他承认对中国上头了

知法而形
2026-03-29 11:53:37
内塔尼亚胡一声令下,维和部队遭袭击,1189人死亡,普京亮明态度

内塔尼亚胡一声令下,维和部队遭袭击,1189人死亡,普京亮明态度

黑鹰观军事
2026-03-30 18:04:00
上海男篮的难题又来了!

上海男篮的难题又来了!

新民晚报
2026-03-30 10:42:17
2026-03-30 20:07:00
Ping值焦虑
Ping值焦虑
有态度网友ytd
413文章数 4关注度
往期回顾 全部

科技要闻

一句谎言引发的硅谷血案

头条要闻

河南女子举报母亲去世后被结婚 官方通报

头条要闻

河南女子举报母亲去世后被结婚 官方通报

体育要闻

想进世界杯,意大利还要过他这一关

娱乐要闻

单依纯凌晨发长文道歉!李荣浩再回应

财经要闻

本轮地缘冲突,A股凭什么走出独立行情

汽车要闻

理想i9要来了!外形似小号MEGA 能冲击高端纯电市场?

态度原创

时尚
家居
手机
数码
房产

来到1980的周也,好毛利兰

家居要闻

东方法式美学 现代简约

手机要闻

哈苏双2亿小屏旗舰!OPPO Find X9s Pro官宣:4月见

数码要闻

性能最强的锐龙AI 9 H 465轻薄本!华硕无畏Pro16锐龙版2026评测

房产要闻

重磅!番禺20宗涉宅地亮相,万博CBD宅地将上新!

无障碍浏览 进入关怀版