为V8优化CoffeeScript生成的JS

时间:2012-05-27 11:50:07

标签: node.js coffeescript

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, 5th edition),因此我们不需要上述技巧。

我对不同的JavaScript实现并不十分熟悉,但我确信它不是唯一由于浏览器不兼容而产生的非最佳代码coffee -c,如果我们在生产服务器中考虑它们的全部成千上万的并发连接会给代码增加相当大的不必要的开销。

有没有办法解决这个问题?现在越来越多的Node.js代码写在CS中,随着SourceMap的出现,这个数字会更大......

1 个答案:

答案 0 :(得分:3)

这几乎不是最佳的; __indexOf声明在开头评估一次,并立即解析为[].indexOf,即使用底层实现的Array.prototype.indexOf。那肯定不是一笔巨大的开支。

我需要看一些其他“非最佳”代码的例子,但我相信它们中的大多数都属于同一个篮子。并发连接数根本不会扩展此效果。