Node.js 26.9 默认开启 node:ffi:单次调用 37 纳秒
来源:dev.to — 2026-09-18
📋 概述
Node.js 26.9.0 的更新日志里有一行改变了「直接调用 C 库」的含义:node:ffi 从需要 --experimental-ffi 变成默认可用,而过去开启它的标志现在变成了关闭它的标志。作者编译了一个小 C 库做实测:普通 JS 调用约 3 纳秒,N-API 插件约 35 纳秒,node:ffi 约 37 纳秒——FFI 比编译插件慢七八个百分点,15 倍于留在 JS 里的成本。它真正的价值不是性能,而是一百万个浮点数求和时比 JS 循环快 15%–20%,以及省掉 node-gyp、编译工具链和按 ABI 重编译的负担。
🔑 核心要点
- 默认值变了:26.9.0 起 node:ffi 开箱可用,过去的开启标志反而变成关闭标志,CI 里锁版本的项目要注意。
- 实测单次调用成本:普通 JS 2.2–3.0 纳秒,N-API 插件 34.1–35.8 纳秒,node:ffi 37.5–38.1 纳秒。
- FFI 并不比它想替代的方案更快,它的卖点是便利:不需要 node-gyp、不需要镜像里带编译器、不随 ABI 重编译。
- 它真正赢在搬数据而不是调函数:把一千万个 float64 通过指针求和,FFI 比 JS 循环快 15%–20%。
- 单次中等规模计算(如 C 里迭代算 fib(75))与 JS 版本几乎一致,说明为了「顺手调一下 C」而跨边界通常不划算。
- 文档说的「不安全」是真实的:一个错误签名会直接崩掉进程;但参数形状检查是有的,例如 uint64 位置传 Number 会被拒绝而不是隐式转换。
💡 金句
这里真正重要的数字不是「FFI 很慢」——37 纳秒本身什么都不是——而是 FFI 并没有跑赢它本该替代的东西。
👍 0
👎 0
← 返回 dev.to 首页