从v8压缩性能

有没有什么好的教程如何编写v8的快速,高效的代码(具体来说,为node.js)?

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

从我的经验:

  • 它内联
  • 函数调用开销最小(内联)
  • 什么是昂贵的是传递巨大的function,因为这些需要被复制,从我的经验V8并不总是这样聪明的,在这种情况下
  • 范围查找是昂贵的(惊喜)
  • 不要做诡计,例如我有一个JS对象的二进制编码器,通过在那里移位(而不是Math.floor)来实现一些额外的性能,最新的曲轴 (是的,但仍然)代码运行速度慢30%
  • 不要使用魔法。 eval,arguments.callee等。这几乎杀了任何优化,因为代码不能再内联
  • 一些新的ES5的东西,例如.bind()目前在V8中确实很
  • 不知何故, new Object()new Array()是目前有点快(MICROoptimization,除非你写一些疯狂的编码棒与{}[]

我的规则:

  • 编写好的代码
  • 编写工作代码
  • 编写严格模式下的代码(支持还得着陆 ,但进一步优化的时候可以通过V8应用)

如果您是JS专家,并且您已经将所有良好实践应用于您的代码,则几乎没有任何事情可以提高性能。

如果遇到性能问题:

  • validation他们
  • 更改代码/algorithm
  • 作为最后的手段:编写一个C ++扩展(并观察每一个提交到GitHub RY /节点,因为没有人关心是否一些内部的变化打破你的构build)

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

了解V8是来自nodecamp.eu的一组幻灯片,并提供了一些有趣的提示。 特别是,我发现有关避免“字典模式”有用的注意事项,即帮助保持对象的“形状”不变,并且不添加任意属性。

您还应该使用--crankshaft --trace-opt --trace-bailout ( – 仅在64位平台上需要 – 例如OS X)运行节点,以查看V8是否正在“跳出”某些function。 还有很多其他跟踪选项,包括--trace-gc和其他各种GC跟踪,这对优化是有用的。

让我知道,如果你有任何关于幻灯片的具体问题,因为它们有点简洁。 :-)他们不是我的,但我已经做了一些关于他们覆盖的领域的研究。