找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 162|回复: 0

如何根据 v8 来适配代码?

[复制链接]

1091

主题

0

回帖

3307

积分

管理员

积分
3307
发表于 2023-12-8 09:40:42 | 显示全部楼层 |阅读模式

这个标题是要表达啥意思呢?就是有些时候,开发的代码虽然能跑,但是并不是最符合 v8 的那种
比如call(...args)这种函数,我看到最优写法好像是

if(args.length===1){
call(args[0])
}else if (args.length===2)
{...}
else if  (args.length===3)
{...}


这种先固定几个参数,比如 5 个,那么参数在 5 个之内的效率是最高的,超过 5 个后再用...args,传参
那么还有什么其他的需要注意的,有没有大佬出过这种根据引擎写最优的执行代码?
不是真优化,就是想长见识....


v8 可以打印生成的字节码 /机器码,可以观察优化是不是真的有效。
v8 会把 JS 转成字节码,然后再进行优化,运行过程中也会实时优化,以及 v8 版本迭代的时候也可能会有优化策略调整,所以这块近乎是混沌的,不好在写代码的时候就预测出来。这种用引擎跑的语言的设计目标之一就是让开发者不去关心底层细节,真正遇到性能问题可以考虑 Wasm 。
现在最快的已经是  Reflect.apply(call, null, args)了,所以我的答案是别干,除非你是给特定版本 node 写库
这个🌰的说法我有点儿好奇。因为我在 laravel 源码中的 Facade 部分也看到这种写法,如果有 1~4 个参数就是直接调用,大于 4 个就用 call_user_func_array 的形式。这才听说,原来这样更优化 😥
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|张迁碑

GMT+8, 2024-10-31 19:23 , Processed in 0.156876 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表