V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wszgrcy
V2EX  ›  Node.js

如何根据 v8 来适配代码?

  •  
  •   wszgrcy · 2022-01-05 15:04:59 +08:00 · 6741 次点击
    这是一个创建于 1088 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 这个标题是要表达啥意思呢?就是有些时候,开发的代码虽然能跑,但是并不是最符合 v8 的那种
    • 比如call(...args)这种函数,我看到最优写法好像是
    if(args.length===1){
    call(args[0])
    }else if (args.length===2)
    {...}
    else if  (args.length===3)
    {...}
    
    • 这种先固定几个参数,比如 5 个,那么参数在 5 个之内的效率是最高的,超过 5 个后再用...args,传参
    • 那么还有什么其他的需要注意的,有没有大佬出过这种根据引擎写最优的执行代码?
    • 不是真优化,就是想长见识....
    4 条回复    2022-01-05 17:38:13 +08:00
    iqoo
        1
    iqoo  
       2022-01-05 15:23:28 +08:00
    v8 可以打印生成的字节码 /机器码,可以观察优化是不是真的有效。
    libook
        2
    libook  
       2022-01-05 16:39:45 +08:00
    v8 会把 JS 转成字节码,然后再进行优化,运行过程中也会实时优化,以及 v8 版本迭代的时候也可能会有优化策略调整,所以这块近乎是混沌的,不好在写代码的时候就预测出来。

    这种用引擎跑的语言的设计目标之一就是让开发者不去关心底层细节,真正遇到性能问题可以考虑 Wasm 。
    Opportunity
        3
    Opportunity  
       2022-01-05 17:12:22 +08:00   ❤️ 1
    现在最快的已经是

    Reflect.apply(call, null, args)

    了,所以我的答案是别干,除非你是给特定版本 node 写库
    Rache1
        4
    Rache1  
       2022-01-05 17:38:13 +08:00
    这个🌰的说法我有点儿好奇。

    因为我在 laravel 源码中的 Facade 部分也看到这种写法,如果有 1~4 个参数就是直接调用,大于 4 个就用 call_user_func_array 的形式。

    这才听说,原来这样更优化 😥
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2874 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 09:03 · PVG 17:03 · LAX 01:03 · JFK 04:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.