Javascript无处不在,在我心中不断变得越来越重要.大多数程序员会同意,虽然Javascript本身是丑陋的,但它的“领土”确实令人印象深刻.随着HTML5的功能和通过Javascript部署应用程序的现代浏览器的速度是一个有趣的选择:它可能是跨平台的,你可以得到.
自然的结果是交叉编译器.主要可能是GWT,但还有其他几个选择.我最喜欢的是Coffeescript,因为它只是在Javascript上添加了一个薄层,而且比“GWT”更“轻”.
只有一件事情让我失望:虽然我的项目是相当小的性能一直是一个重要的话题.这是一个报价
The GWT SDK provides a set of core Java APIs and Widgets. These allow
you to write AJAX applications in Java and then compile the source to
highly optimized JavaScript
Coffeescript是否也进行了优化?由于Coffeescript似乎大量使用非常见的Javascript功能,我担心他们的性能如何比较.
你有经验与Coffeescript相关的速度问题吗?
你知道一个很好的基准比较吗?
解决方法
对于复活一个旧话题的道歉,但它也是关于我的.我决定进行一些测试,我知道的一个最简单的性能测试是将连续的值写入阵列,内存以熟悉的方式消耗,随着阵列的增长,“for”循环在现实生活中是常见的,被考虑相关.
经过几个红色的鲱鱼,我发现咖啡的最简单的方法是:
newway = -> [0..1000000] # simpler and quicker than the example from http://coffeescript.org/#loops # countdown = (num for num in [10..1])
这将使用一个闭包并返回数组作为结果.我的等同是这样的:
function oldway() { var a = []; for (var i = 0; i <= 1000000; i++) a[i] = i; return a; }
你可以看到结果是相同的,它也以类似的方式增长了一个数组.接下来我分别镀铬100次,平均.
newway() | 78.5ms oldway() | 49.9ms
Coffeescript慢78%.我反驳说,“你写的CoffeeScript最终运行速度和(你经常写的JS一样快)(Jeremy Ashkenas)
附录:我也怀疑“JS总是有一对一”的普遍信念.我试图用这个重新创建我自己的代码:
badway = -> a = [] for i in [1..1000000] a[i] = i return a
尽管有相似之处,但它仍然被证明是慢了7%,因为它增加了方向(增量或减量)的检查,这意味着它不是一个直接的翻译.