Node.js 27 有什么新东西:Iterator 全家桶、4 GB 默认堆与 req.headers 无原型
来源:nodejsdesignpatterns.com — 2026-10-30
📋 概述
2026 年 10 月 29 日发布的是 v27.0.0-alpha.0.0.0——版本号本身就说明了变化:Node.js 改成每年一个大版本、先跑六个月 Alpha,27 将于 2027 年 4 月进 Current、10 月转 LTS 并支持到 2030 年 4 月。V8 从 14.6 升到 15.6,带来 Iterator.zip()、zipKeyed()、join()、includes() 与 Math.sumPrecise();node:net 有了 promises 子模块且 net.Server 变成异步可迭代;node:vfs 摘掉实验标志;Permission Model 增加 --allow-env,未匹配的环境变量在任何 JS 执行前就被擦除。
🔑 核心要点
- Iterator.zip() 能惰性配对两个可迭代对象,包括永不结束的生成器;zipKeyed() 把多列数组变成按名字取值的行对象,join()/includes() 省掉中间数组。
- Math.sumPrecise() 用内部高精度累加器只在最后舍入一次:[1e20, 0.1, -1e20] 求和得到 0.1 而不是 0。
- V8 默认老生代堆上限改为物理内存的一半、夹在 256 MB 到 4 GB 之间,8 GB 机器从 2 GB 变成 4 GB,多进程部署要显式传 --max-old-space-size。
- req.headers 与 req.trailers 变成无原型对象,req.headers.hasOwnProperty() 会直接抛 TypeError,应改用 Object.hasOwn();动机是根治 __proto__ 类原型污染(CVE-2026-21710)。
- HTTP 默认 keepAliveTimeout 从 5 秒提到 65 秒,专门治 ALB/Nginx/Cloudflare 复用连接时那些间歇 502。
- 升级前要留意的破坏性变化:v8.serialize 新格式旧版本读不了、堆快照体积翻倍、Math.log(3) 末位变化、Array.prototype.sort 换成 PowerSort。
💡 金句
如果你在 2027 年 4 月之前读到这篇,请继续使用 LTS 版本。
👍 0
👎 0
← 返回 Lobsters 首页