Javascript 压缩v8引擎的性能
有没有关于如何为v8(特别是node.js)编写快速、高效代码的好教程Javascript 压缩v8引擎的性能,javascript,performance,node.js,Javascript,Performance,Node.js,有没有关于如何为v8(特别是node.js)编写快速、高效代码的好教程 我应该避免使用什么结构?v8优化的习惯用法是什么?文档给出了一个很好的答案:根据我的经验: 它做内联 函数调用开销最小(内联) 代价高昂的是将巨大的字符串传递给函数,因为这些字符串需要复制,而且根据我的经验,V8并不总是像在这种情况下那样智能 范围查找代价高昂(令人惊讶) 不要耍花招,例如,我有一个用于JS对象的二进制编码器,在那里(而不是Math.floor)通过位移位产生一些额外的性能。最新的(是alpha,但仍然)代
我应该避免使用什么结构?v8优化的习惯用法是什么?文档给出了一个很好的答案:根据我的经验:
- 它做内联
- 函数调用开销最小(内联)
- 代价高昂的是将巨大的字符串传递给函数,因为这些字符串需要复制,而且根据我的经验,V8并不总是像在这种情况下那样智能
- 范围查找代价高昂(令人惊讶)
- 不要耍花招,例如,我有一个用于JS对象的二进制编码器,在那里(而不是Math.floor)通过位移位产生一些额外的性能。最新的(是alpha,但仍然)代码运行速度慢30%
- 不要使用魔法。eval、arguments.callee等。由于代码不能再内联,这些几乎会扼杀任何优化
- 一些新的ES5功能,例如
,目前在V8中速度非常慢.bind()
- 不知何故,
和newobject()
目前的速度要快一点(微优化,除非你正在编写一些疯狂的编码器,使用newarray()
和{}
)[]
- 编写好代码
- 编写工作代码
- 编写在严格模式下工作的代码(仍然有支持,但当支持时,V8可以应用进一步的优化)
- 核实一下
- 更改代码/算法
- 以及作为最后的手段:编写一个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年出版的,所以情况有了一些变化,但我猜变化不大: