Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 压缩v8引擎的性能_Javascript_Performance_Node.js - Fatal编程技术网

Javascript 压缩v8引擎的性能

Javascript 压缩v8引擎的性能,javascript,performance,node.js,Javascript,Performance,Node.js,有没有关于如何为v8(特别是node.js)编写快速、高效代码的好教程 我应该避免使用什么结构?v8优化的习惯用法是什么?文档给出了一个很好的答案:根据我的经验: 它做内联 函数调用开销最小(内联) 代价高昂的是将巨大的字符串传递给函数,因为这些字符串需要复制,而且根据我的经验,V8并不总是像在这种情况下那样智能 范围查找代价高昂(令人惊讶) 不要耍花招,例如,我有一个用于JS对象的二进制编码器,在那里(而不是Math.floor)通过位移位产生一些额外的性能。最新的(是alpha,但仍然)代

有没有关于如何为v8(特别是node.js)编写快速、高效代码的好教程


我应该避免使用什么结构?v8优化的习惯用法是什么?

文档给出了一个很好的答案:

根据我的经验:

  • 它做内联
  • 函数调用开销最小(内联)
  • 代价高昂的是将巨大的字符串传递给函数,因为这些字符串需要复制,而且根据我的经验,V8并不总是像在这种情况下那样智能
  • 范围查找代价高昂(令人惊讶)
  • 不要耍花招,例如,我有一个用于JS对象的二进制编码器,在那里(而不是Math.floor)通过位移位产生一些额外的性能。最新的(是alpha,但仍然)代码运行速度慢30%
  • 不要使用魔法。eval、arguments.callee等。由于代码不能再内联,这些几乎会扼杀任何优化
  • 一些新的ES5功能,例如
    .bind()
    ,目前在V8中速度非常慢
  • 不知何故,
    newobject()
    newarray()
    目前的速度要快一点(微优化,除非你正在编写一些疯狂的编码器,使用
    {}
    []
我的规则:

  • 编写好代码
  • 编写工作代码
  • 编写在严格模式下工作的代码(仍然有支持,但当支持时,V8可以应用进一步的优化)
如果您是一名JS专家,并且已经将所有内容应用到了代码中,那么您几乎无法做任何事情来提高性能

如果遇到性能问题:

  • 核实一下
  • 更改代码/算法
  • 以及作为最后的手段:编写一个C++扩展(并观察GITHUB上的每个RI/NORE提交,因为没有人关心一些内部更改是否破坏了您的构建)
    • 是nodecamp.eu上的一组幻灯片,提供了一些非常有趣的提示。特别是,我发现关于避免“字典模式”的注释非常有用,即,如果保持对象的“形状”不变,并且不向其添加任意属性,则会有所帮助

      您还应该使用
      --曲轴--trace opt--trace bailout
      运行节点(只有在64位平台(例如OS X)上才需要
      --曲轴
      ),以查看V8是否在对某些函数进行JIT时处于“bailing”状态。还有大量其他跟踪选项,包括
      --trace gc
      和各种其他gc跟踪,它们对优化非常有用


      如果您对上述幻灯片有任何具体问题,请告诉我,因为它们有点简洁。:-)它们不是我的,但我对它们所涵盖的领域做了一些研究。

      只是好奇,但你为什么要问?难道你不应该更关心从最慢(但被广泛使用)的渲染引擎中挤出性能而不是最快的渲染引擎吗?看来最快的会自己搞定的。我只是想知道v8不喜欢什么。高效的代码对我来说很重要。很好的回答nornagon-当问题被忽略,而回答是无关的时,它令人难以置信地沮丧。我也只是为了兴趣而感兴趣!这些文件还不够。v8做内联吗?函数调用有多贵?创建对象的成本有多高?我想知道v8在各种情况下有多聪明,不仅仅是在属性访问方面。谢谢——Javascript Garden看起来很棒:)这是一篇老文章,但我最近看到了一些关于这个问题的精彩视频(来自Google IO 2012)。这本书是2012年出版的,所以情况有了一些变化,但我猜变化不大: