从v8中挤出性能

时间:2011-01-17 05:58:27

标签: javascript performance node.js

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

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

3 个答案:

答案 0 :(得分:18)

根据我的经验:

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

我的规则:

  • 写好代码
  • 编写工作代码
  • 编写在严格模式下工作的代码(支持仍有to land,但是当它进行进一步优化时可以应用V8)

如果您是JS专家并且已经将所有good practices应用于您的代码,那么您几乎无法采取任何措施来提高性能。

如果遇到性能问题:

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

答案 1 :(得分:0)

文档给出了一个很好的答案:http://code.google.com/apis/v8/design.html

答案 2 :(得分:0)

Understanding V8是来自nodecamp.eu的一组幻灯片,并提供了一些有趣的提示。特别是,我发现避免“词典模式”的注释很有用,即如果你保持对象的“形状”不变并且不向它们添加任意属性,它会有所帮助。

您还应该使用--crankshaft --trace-opt --trace-bailout运行节点(仅在64位平台上需要--crankshaft,例如OS X),以查看V8是否在JITing某些功能上“失败”。还有大量其他跟踪选项,包括--trace-gc和各种其他GC跟踪,可用于优化。

如果您对上面的幻灯片有任何具体问题,请告诉我,因为它们有点简洁。 :-)他们不是我的,但我已经对他们所涉及的领域进行了一些研究。