从v8中挤出性能

nor*_*gon 13 javascript performance node.js

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

我应该避免使用哪些结构?v8优化得很好的成语是什么?

Ivo*_*zel 18

根据我的经验:

  • 它确实内联
  • 函数调用开销很小(内联)
  • 昂贵的是将大量的字符串传递给函数,因为那些需要复制并且根据我的经验V8并不总是像在这种情况下那样聪明
  • 范围查找很昂贵(惊喜)
  • 不要做技巧,例如我有一个JS Object的二进制编码器,通过位移(而不是Math.floor)发出一些额外的性能最新的Crankshaft(是的alpha,但仍然)运行代码慢了30%
  • 不要使用魔法.eval,arguments.callee等.因为代码不能再内联,所以几乎可以杀死任何优化
  • 一些新的ES5内容.bind()目前在V8中确实很
  • 不知怎的new Object(),new Array()现在有点快(MICROoptimization,除非你正在写一些疯狂的编码器棒{}[])

我的规则:

  • 写出好的代码
  • 编写工作代码
  • 编写在严格模式下工作的代码(支持仍然需要着陆,但是当它进一步优化时可以应用于V8)

如果您是JS专家并且已经在代码中应用了所有良好实践,那么您几乎无法做任何改进性能的工作.

如果遇到性能问题:

  • 验证他们
  • 更改代码/算法
  • 作为最后的手段:写一个C++扩展(并观察GitHub上每个提交到ry/node的事情,因为没有人关心是否有一些内部更改破坏了你的构建)