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

推荐订阅源

C
Check Point Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 聂微东
月光博客
月光博客
博客园 - 司徒正美
爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
量子位
Recent Announcements
Recent Announcements
V
V2EX
P
Proofpoint News Feed
小众软件
小众软件
云风的 BLOG
云风的 BLOG
腾讯CDC
宝玉的分享
宝玉的分享
Microsoft Azure Blog
Microsoft Azure Blog
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
A
About on SuperTechFans
B
Blog
博客园_首页
GbyAI
GbyAI
博客园 - Franky

分享创造

分享 KCase 脑图测试用例生成平台(AI 辅助生成测试用例) 标签页囤积症自救:写了个插件 TabRack,主打快速检索、自动分类和 AI 摘要 [file-preview]一个比较全面的在线文件预览组件库-支持 react 和 vue 撸了个 iOS 小应用[极简水印相机],直接免费 做了一个 V2EX Skill 写了个 iOS 打码 App「遮鸭 Maskduck」,纯离线免费 35 岁前端,裁员失业后,我花 1 个月做了个 AI 生图网站 亲身经历猫咪急症,我做了一款猫狗疼痛检测工具,希望能救你家毛孩一命 如何用 AI 做比较酷炫的落地页? 求真!最近 AI 生图的能力强到可怕 开源一个查看 k8s 的菜单栏工具-kubebar Packpour:我做了个专门给 App Store Connect 填多语言元数据的小工具 面对 140 年一遇的超级厄尔尼诺,我做了个全球监测小站 做了一个自动翻译的 Hacker News 客户端 做了一个 AI 头像生成器,可以免费生成 2 次 [送码 50 个] 自己手搓了个高颜值的倒数日 App——拾光机,求 V 友们指点 一个将苹果健康 APP 数据导出的工具,然后把你的数据喂给 AI 分析 我做了一个叫「订阅斩」的 iOS App,专门对付那些悄悄扣钱的订阅 做了个草率的日麻互动漫画,听听反馈 喜欢自己洗车的朋友们,我用 ai 做了一款洗车小程序 -- 洗车志 感谢 V2EX 上各位 NAS🍆 和 Datahoarder 玩家的关注和真实反馈!作为个人开发者,能得到这么多硬核玩家们的讨论,我非常荣幸。 用 AI 开发熊孩子自律的小程序 用 OpenClaw 搭建个人运动助手 今天摸鱼给 NanaAI 也接入了 GPT-Image-2 [Video Companion]一个 chrome 插件,解决大多对视频操作的需求~欢迎使用提 bug AI 时代,做产品简单了,把产品推广出去却变的更难了~ bestskills.dev - Skills 精选和评测站点 免 ROOT 强力卸载安卓广告软件 一个 All In One 的运维工具,支持 SSH、数据库、Redis 管理 [开源] Codeg V0.10:专注于代码生成的多智能体 IDE(cc、codex、gemini、opencode……),新版本重构了工作区,飞一般的体验,支持桌面端、服务器部署
Pilates 2.0:纯 TS flex 布局引擎,9 个基准都比 WASM Yoga 快
nnnnon · 2026-05-23 · via 分享创造

最近在做一个终端 UI 的 flex 布局引擎,叫 Pilates 。纯 TypeScript,零运行时依赖,跟 Ink 用的 WASM Yoga(Facebook 的 flex 引擎,C++ 编译成 WASM)对照过 33 个 oracle fixture 加一个结构化 fuzzer 。

本周发的 2.0 想分享一下:在我跑的 9 个基准场景里,纯 TS 引擎都比 WASM Yoga 快。包括 hot-structural(每帧 append + remove 一行),这个场景一周前 Yoga 还领先 5×,现在反过来 Pilates 快 1.7×。

中位延迟,win32-x64,Node 22:

场景 Pilates Yoga 比率
tiny (10 节点) 4.5µs 19.0µs 4.2×
realistic (~100) 121µs 328µs 2.7×
stress (~1000) 601µs 1.94ms 3.2×
big (~5000) 3.32ms 9.17ms 2.8×
huge (~10000) 8.62ms 18.5ms 2.1×
hot-relayout 16.3µs 83.0µs 5.1×
hot-relayout + boundaries 15.8µs 77.8µs 4.9×
hot-relayout (文本变更) 8.9µs 90.6µs 10×
hot-structural 71.3µs 118.3µs 1.7×

提前说一下:9 个场景是我自己挑的,不能代表所有 workload 。复现 pnpm bench,5 分钟。

这周做的两件事让 hot-structural 从 ~450µs 降到 ~70µs:

  1. flex 分配规则之前每个 cell 都依赖前面所有兄弟的尺寸,一行 100 cell 就有 ~300 条依赖边。改成线性递推,每个 cell 只读前一个 cell 的位置和尺寸。

  2. 大概一半的 grammar input field 永远停留在默认值上(margin 0, minWidth 0 那种)。在 grammar 构建期把它们 fold 成常量,每个 cell 的字段数从 ~15 降到 ~7 。

公开 API 跟 1.x 字节级一致,calculateLayout() 没变,升级就有提速。

仓库(MIT):https://github.com/pilatesjs/pilates npm:https://www.npmjs.com/package/@pilates/core

欢迎对抗性 benchmark,如果有 workload 是这个方案破解不了的,我很想看看。