以下简单代码片段的coffee
-generated 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,第五版),所以我们不需要上面的技巧。
我不太熟悉不同的JavaScript实现,但我确信这并不是coffee -c
由于浏览器不兼容而产生的唯一非最佳代码,如果我们在具有数千个并发连接的生产服务器中考虑所有这些代码,它们会给代码增加相当大的不必要开销。
有办法补救吗?现在越来越多的Node.js代码是用CS编写的,随着SourceMap的出现,将会有更多的.
发布于 2012-05-27 04:12:33
这几乎不是最优的;__indexOf
声明在开始时只计算一次,然后立即被解析为[].indexOf
,即使用底层实现的Array.prototype.indexOf
。当然,这并不是一笔巨大的开支。
我需要看到一些“非最优”代码的其他例子,但我确信它们中的大多数都落入了同一个篮子中。并发连接的数量根本无法扩展这一效果。
https://stackoverflow.com/questions/10773769
复制