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

37纳秒一次调用,Node.js把FFI默认打开了

0
分享至

9月16日,Node.js 26.9.0发布。更新日志里有一行改动,悄悄改写了"直接调用C库"这件事在Node里的含义:node:ffi这个模块,现在默认开启。

在此之前,想用它得先加上--experimental-ffi参数。从26.9.0开始,它直接就能用,而那个曾经用来打开它的参数,现在的作用变成了关闭它。


有人下载了26.9.0,写了一个小型的C库,花了一上午时间,想搞清楚这个开关到底要付出什么代价,又会在哪里出问题。

默认开启意味着什么

不带任何参数运行,模块能跑起来,但会带一条实验性警告。加上那个曾经必需的参数,不会带来任何新变化,因为模块本来就已经在那里了。

唯一能回到旧行为的方式,是加上--no-experimental-ffi。这时会直接抛出错误:找不到名为node:ffi的内置模块。

这说明它是一次真正的默认值变更,不是文档层面的更新。任何导入node:ffi的代码,过去在没加参数的旧版26.x上会失败,现在在26.9.0上会静默成功。如果你的CI里锁定了版本,这一点值得留意。

和编译型插件比,谁更快

node:ffi存在的意义,是作为另外两条老路的替代方案:用C写一个N-API插件,或者去调用一个编译好的二进制文件。这里选择了和插件对比,因为这是更公平的较量——两者都是从运行中的Node进程调用原生代码。

测试方式是编译一个包含add_i32(a, b)的小型共享库,写一个等价的N-API插件,各调用五百万次,再用纯JS做同样的操作作为基线。

结果是:做完全相同的加法,FFI比编译型插件慢大约7%到8%,而两者都是纯JS做这件小事的约十五倍成本。这个差距,就是每次调用时在JS和原生边界之间搬运参数要付的代价,无论你是写C还是只声明一个签名,这笔钱都得付。

这里真正重要的数字不是"FFI很慢"——37纳秒本身不算什么——而是FFI并没有打败它本该替代的东西。如果你已经有一个原生插件,node:ffi不是性能升级。它的理由是便利:不需要node-gyp,部署镜像里不需要编译器工具链,也不用为每个Node ABI版本重新构建。

什么时候它才真的快

两数相加的测试,主导因素是调用开销,而不是实际工作。换成一个真正干活的函数再跑一次:通过指针累加一千万个float64值。

这一次FFI稳定地更快,快了15%到20%。原因是一次调用携带了一千万个元素,而不是把固定开销摊到一千万次调用上。这才是FFI真正擅长的形态:批量缓冲区操作,而不是大量的小调用。

反过来看也成立。跑一次原生的fib(75),用C里紧凑的迭代循环计算,对比JS里同样的循环:

  • js-fib(75):0.10毫秒
  • ffi-fib(75):0.09毫秒

基本没有区别。V8的JIT编译这种简单循环的速度,和gcc -O2差不多。所以对于单次中等规模的计算,跨进原生代码什么也换不来。FFI固定的每次调用成本,只有在调用次数或数据量足够大、能把它吞掉时才划算。一次性的"让我调一下C"通常不属于这种情况。

四种写错的方式,三种结果

文档把node:ffi称为"不安全",并警告错误的签名可能导致进程崩溃。测试了四种写错的方式,得到了三种不同的结果。

在需要uint64参数的地方传一个普通数字,会被直接拒绝,抛出类型错误,提示参数必须是uint64。必须传BigInt,一个Number,哪怕小到10000000,也会被拒绝,而不是被强制转换。

用两个参数的函数只传一个参数,同样会被捕获,抛出参数数量错误。

这两种都是模块替你做的参数形状检查,单看它们,并不符合"不安全、会崩溃"的说法。

声明错误的返回类型,才是那个说法开始成立的地方。fib函数返回int64,把它声明成返回int32再调用,没有报错,没有警告,只有一个被静默截断的错误数字。这种bug能通过代码审查,因为它看起来没有任何不对。

再给sum_doubles传一个真实的指针,但长度是错的——一个10元素的缓冲区,却告诉函数它有一千万个元素。结果是段错误,核心已转储,退出码139。这才是文档警告的那种真正的崩溃,而制造它并不需要什么稀奇的操作,只是一个不一致的长度,一次重构把缓冲区大小改了、调用点却没跟着更新,就会引入。

所以这个模块会校验参数数量和基本标量类型,但不校验指针边界,也不校验返回类型的正确性。这是一条值得记住的分界线。

权限模型里的独立闸门

Node的权限模型把FFI当作一道独立的闸门。在--permission下运行、又没有明确允许它时,会抛出访问被拒绝的错误,提示需要用--allow-ffi来管理权限。

换句话说,默认开启不等于默认放行。想用FFI,权限这一关还得单独过。

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

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.

相关推荐
热点推荐
当年我养猪供侄子上大学,他当上官再没回老家,直到我被村霸欺负

当年我养猪供侄子上大学,他当上官再没回老家,直到我被村霸欺负

五元讲堂
2025-08-21 15:12:14
输掉的不仅是20分:名古屋这一夜,中国男篮被卸掉的本钱

输掉的不仅是20分:名古屋这一夜,中国男篮被卸掉的本钱

无月可归辛
2026-09-19 01:34:56
长期不开的油车,最毁车的不是停着不动,而是你忘了这几件事

长期不开的油车,最毁车的不是停着不动,而是你忘了这几件事

趣味萌宠的日常
2026-09-12 04:14:16
《兰香如故》赵星棠惨死芦苇荡!原来,这才是她临终托付兰香真相

《兰香如故》赵星棠惨死芦苇荡!原来,这才是她临终托付兰香真相

乡野小珥
2026-09-14 10:39:57
上海部分区域发布暴雨预警

上海部分区域发布暴雨预警

财联社
2026-09-19 01:28:32
两性心理学:敢和别人老婆“偷情”的男人,绝大多数都会有这两个“心理”,超准

两性心理学:敢和别人老婆“偷情”的男人,绝大多数都会有这两个“心理”,超准

心理观察局
2026-07-16 06:35:04
马科斯失算了!被折磨到脱相的老杜,凭实力在海牙打了场翻身仗

马科斯失算了!被折磨到脱相的老杜,凭实力在海牙打了场翻身仗

观锐器
2026-09-18 22:10:04
央媒记者怒斥亚运会:日本非蠢即坏!知小礼无大义?小礼都没了

央媒记者怒斥亚运会:日本非蠢即坏!知小礼无大义?小礼都没了

念洲
2026-09-18 13:12:36
科学家称宇宙有10个维度,一旦进入十维空间,人就会既死亡又永生

科学家称宇宙有10个维度,一旦进入十维空间,人就会既死亡又永生

掠影后有感
2026-09-17 10:56:28
1.6万亿到2万亿放量!为什么很多人倒在黎明前?

1.6万亿到2万亿放量!为什么很多人倒在黎明前?

华哥的投资笔记
2026-09-18 20:43:21
独派炒作王伟忠专访沈伯洋,“台湾民主”早已沦为民进党绿色法西斯

独派炒作王伟忠专访沈伯洋,“台湾民主”早已沦为民进党绿色法西斯

峰攀登者
2026-09-17 18:27:49
1400万粉的网红徐姥姥,亲戚个个都开豪车,为啥她还住在破屋子里

1400万粉的网红徐姥姥,亲戚个个都开豪车,为啥她还住在破屋子里

寒士之言本尊
2026-09-16 23:20:32
亚运会签位:王楚钦与张本智和同区,林诗栋碰松岛,孙颖莎在下半区

亚运会签位:王楚钦与张本智和同区,林诗栋碰松岛,孙颖莎在下半区

余憁搞笑段子
2026-09-18 05:46:12
香烟再次成为关注对象!多名院士发现:糖尿病常抽烟,有5变化

香烟再次成为关注对象!多名院士发现:糖尿病常抽烟,有5变化

健康科普365
2026-07-10 20:25:03
马斯克:西方不搞电车,欧日韩集体拥抱氢能,中国电动车错了没?

马斯克:西方不搞电车,欧日韩集体拥抱氢能,中国电动车错了没?

天天热点见闻
2026-09-16 06:57:47
周口扩容大势已定,西华、商水、项城,谁最先撤县设区?

周口扩容大势已定,西华、商水、项城,谁最先撤县设区?

阿莱美食汇
2026-09-18 12:15:52
香港兰桂坊女子光身笑着游街震撼路人,现场视频疯传原因惹关注,网友警告:最高可判处罚款100万元及监禁3年!

香港兰桂坊女子光身笑着游街震撼路人,现场视频疯传原因惹关注,网友警告:最高可判处罚款100万元及监禁3年!

澳门月刊
2026-09-17 16:53:28
感慨万千啊!一张35年工资图刷屏:人生高光,只停留在中年那几年

感慨万千啊!一张35年工资图刷屏:人生高光,只停留在中年那几年

火山詩话
2026-09-17 21:10:21
全国只剩2个省人口过亿、16个省不足5000万,人都到哪了?

全国只剩2个省人口过亿、16个省不足5000万,人都到哪了?

元气科技馆
2026-08-01 21:53:46
中国28岁留学生嫖娼16岁日本女高中生,被抓狡辩:为了学日语!

中国28岁留学生嫖娼16岁日本女高中生,被抓狡辩:为了学日语!

圆圆神神神
2025-08-09 21:49:27
2026-09-19 02:32:49
硅屿手记
硅屿手记
有态度网友ytd
240文章数 75关注度
往期回顾 全部

科技要闻

直击iPhone 18新机发售:黄牛加价不如前代

头条要闻

俄杜马选举拉夫罗夫"意外"登顶名单 梅德韦杰夫被拿下

头条要闻

俄杜马选举拉夫罗夫"意外"登顶名单 梅德韦杰夫被拿下

体育要闻

好吧,中国男篮辛苦了

娱乐要闻

陈思诚 佟丽娅不想让儿子知道两人离婚

财经要闻

研发0.25亿理财26亿,敷尔佳豪赌三类器械

汽车要闻

纯电/插混双动力+五座/六座双布局 海狮08应该怎么选?

态度原创

房产
手机
艺术
健康
军事航空

房产要闻

海口房价,降不动了!

手机要闻

华为手机迎来双喜:Pura X View首周销量大增,Pura 100被传评估阔屏影像!

艺术要闻

好色也分段位?这位时尚摄影大师,直接杀进王者局!

脑动脉瘤的治疗方法,该选哪一种?

军事要闻

中方反对在安理会强推恢复对伊朗制裁

无障碍浏览 进入关怀版