为V8优化CoffeeScript生成的JS

下面的简单代码片段的coffee生成的JS:

 console.log 'b' if 'b' in arr 

 var __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; if (__indexOf.call(arr, 'b') >= 0) { console.log('b'); } 

我能理解为什么是这样。 IE不支持indexOf ,我们希望确保我们的CS代码在所有浏览器上都能顺利运行​​。 但是,当为Node.js服务器编写代码时,我们确切知道JS引擎支持的什么( ECMA-262,第5版 ),所以我们不需要上述的技巧。

我不是非常熟悉不同的JavaScript实现,但我敢肯定,它不是coffee -c生产的唯一非最佳代码,因为浏览器不兼容,如果我们考虑在具有数千个并发连接的生产服务器中,他们为代码添加了相当多的不必要的开销。

有没有办法来解决这个问题? 现在越来越多的Node.js代码是用CS编写的,使用SourceMap在地平线上的数量会更大。

这几乎不是最佳的; __indexOf声明在开始时被评估一次,并立即被parsing为[].indexOf ,即使用底层实现的Array.prototype.indexOf 。 这当然不是一笔巨大的开支。

我需要看到其他一些“非优化”代码的例子,但是我相信大部分代码都属于同一个篮子。 并发连接的数量根本不能缩放这个效果。