call(...args)
这种函数,我看到最优写法好像是if(args.length===1){
call(args[0])
}else if (args.length===2)
{...}
else if (args.length===3)
{...}
1
iqoo 2022-01-05 15:23:28 +08:00
v8 可以打印生成的字节码 /机器码,可以观察优化是不是真的有效。
|
2
libook 2022-01-05 16:39:45 +08:00
v8 会把 JS 转成字节码,然后再进行优化,运行过程中也会实时优化,以及 v8 版本迭代的时候也可能会有优化策略调整,所以这块近乎是混沌的,不好在写代码的时候就预测出来。
这种用引擎跑的语言的设计目标之一就是让开发者不去关心底层细节,真正遇到性能问题可以考虑 Wasm 。 |
3
Opportunity 2022-01-05 17:12:22 +08:00 1
现在最快的已经是
Reflect.apply(call, null, args) 了,所以我的答案是别干,除非你是给特定版本 node 写库 |
4
Rache1 2022-01-05 17:38:13 +08:00
这个🌰的说法我有点儿好奇。
因为我在 laravel 源码中的 Facade 部分也看到这种写法,如果有 1~4 个参数就是直接调用,大于 4 个就用 call_user_func_array 的形式。 这才听说,原来这样更优化 😥 |