微信小程序(mp-weixin)开发态 Node 进程内存压测 说明与实测报告。
本仓库在标准 Oiyo + Wot UI starter 之上,附带 120 个压测页、生成脚本、内存监控脚本与原始采样数据,用于回答:
- 页面数量到 100+ 时,
pnpm dev mp-weixin 会不会 OOM?
- 重模板(Wot UI + 大列表 + 假数据)对首次编译内存有多大影响?
- 编译就绪后批量改动 120 个文件(HMR / 差量编译)时,内存是否持续爬升?
| 监控 |
不监控 |
| Node / Vite / Oiyo 编译进程树 RSS(Working Set) |
微信开发者工具自身内存 |
| 首轮编译与 watch 稳态 |
真机 / 模拟器小程序运行时 JS 堆 |
| 批量 touch 触发的差量编译 |
页面 FPS、包体积、冷启动耗时 |
| 路径 |
作用 |
src/packages/oom-stress/page-001 ~ page-120 |
120 个分包压测页 |
scripts/generate-oom-stress-pages.mjs |
批量生成 / 覆盖压测页 |
scripts/monitor-mp-weixin-memory.mjs |
启动 dev、采样进程树 RSS、ready 后批量 touch |
scripts/oom-reports/ |
历次 JSON / CSV / Markdown 原始报告 |
- Wot UI:
WdTag、WdInput、WdButton、WdCell / WdCellGroup、WdIcon、WdProgress
- 大模板:6 分区 × 每区 24 行列表 + 详情卡片(标签、按钮组、指标条、进度条)
- 假数据:订单 / 用户 / 标签 / 长描述 / metrics 数组等合成数据
| 项 |
值 |
| OS |
Windows |
| Node |
v22.21.1 |
| 命令 |
pnpm exec oiyo dev mp-weixin |
| Heap 上限 |
NODE_OPTIONS=--max-old-space-size=4096 |
| 压测页数 |
120(packages/oom-stress) |
| 采样方式 |
进程树 RSS,约每 2 秒一次 |
| 场景 |
峰值 tree RSS |
首轮 ready |
OOM 文案 |
结论 |
| A 轻量 120 页 · 仅 dev |
1195 MB |
~20.7s |
无 |
页数本身打不爆 Node |
| B 重页 120 页 · HMR×3(第 1 轮) |
3640 MB |
~32.6s |
无 |
批量 HMR 显著抬升内存 |
| C 重页 120 页 · HMR×3(第 2 轮) |
4026 MB |
~27.8s |
无 |
峰值贴近 4GB 上限;post 稳态不回落 |
OOM 判定关键字:JavaScript heap out of memory / FATAL ERROR / Allocation failed。
三轮实测均未命中。
条件:120 个轻量页,不批量 touch。
| 阶段 |
tree RSS |
| 启动 |
~89 MB |
| 编译中峰值 |
~1136 MB |
| 含 IDE 拉起峰值 |
1195 MB |
| watch 稳态 |
~825–895 MB |
要点:首次编译可完成;进入 watch 后内存回落并稳定,未见持续爬升。
条件:重模板 120 页;ready 后对全部 index.vue 写入/更新 <!-- hmr-touch:... -->,强制 watcher 失效,触发差量编译;共 3 轮。
| phase |
start → end (MB) |
max (MB) |
delta (MB) |
| boot |
89 → 1636 |
1636 |
+1547 |
| pre-hmr-steady |
1636 → 1244 |
1636 |
-392 |
| HMR round 1 |
1344 → 2385 |
2385 |
+1041 |
| HMR round 2 |
2468 → 3176 |
3176 |
+708 |
| HMR round 3 |
3266 → 3640 |
3640 |
+374 |
| post-hmr-steady |
3640 → 3329 |
3640 |
-311 |
| phase |
start → end (MB) |
max (MB) |
delta (MB) |
| boot |
89 → 1590 |
1590 |
+1501 |
| pre-hmr-steady |
1590 → 1234 |
1591 |
-356 |
| HMR round 1 |
1339 → 2749 |
2749 |
+1410 |
| HMR round 2 |
2962 → 3409 |
3409 |
+447 |
| HMR round 3 |
3391 → 3847 |
4026 |
+456 |
| post-hmr-steady |
3847 → 3847 |
3847 |
0 |
- 仅堆页数(100+ 轻量页) 不足以让本机
dev mp-weixin 触发 Node OOM;watch 可稳定在约 1GB 以下。
- 重模板 + Wot UI + 假数据 抬高首次编译成本:ready 约 28–33s,boot 峰值约 1.6GB。
- HMR 批量失效 120 个重页面 是主要内存放大器:单轮 touch 常见 +0.4~1.4GB;两轮复测峰值 3.6GB → 4.0GB。