wszgrcy
V2EX  ›  Node.js

如何根据 v8 来适配代码?

  •  
  •   wszgrcy · Jan 5, 2022 · 7404 views
    This topic created in 1621 days ago, the information mentioned may be changed or developed.
    • 这个标题是要表达啥意思呢?就是有些时候,开发的代码虽然能跑,但是并不是最符合 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 replies    2022-01-05 17:38:13 +08:00
    iqoo
        1
    iqoo  
       Jan 5, 2022
    v8 可以打印生成的字节码 /机器码,可以观察优化是不是真的有效。
    libook
        2
    libook  
       Jan 5, 2022
    v8 会把 JS 转成字节码,然后再进行优化,运行过程中也会实时优化,以及 v8 版本迭代的时候也可能会有优化策略调整,所以这块近乎是混沌的,不好在写代码的时候就预测出来。

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

    Reflect.apply(call, null, args)

    了,所以我的答案是别干,除非你是给特定版本 node 写库
    Rache1
        4
    Rache1  
       Jan 5, 2022
    这个🌰的说法我有点儿好奇。

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

    这才听说,原来这样更优化 😥
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2547 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 15:48 · PVG 23:48 · LAX 08:48 · JFK 11:48
    ♥ Do have faith in what you're doing.