所以我有这个简单的代码:
function Run () {
var n = 2*1e7;
var inside = 0;
while (n--) {
if (Math.pow(Math.random(), 2) +
Math.pow(Math.random(), 2) < 1)
inside++;
}
return inside;
}
var start = Date.now();
Run();
console.log(Date.now() - start);
Run Code Online (Sandbox Code Playgroud)
它会输出大约335毫秒的时间.那很不错.但是,如果我像这样封装Run函数:
var d = Date.now();
(function Run () {
var n = 2*1e7;
var inside = 0;
while (n--) {
if (Math.pow(Math.random(), 2) +
Math.pow(Math.random(), 2) < 1)
inside++;
}
return inside;
})();
console.log(Date.now() - d);
Run Code Online (Sandbox Code Playgroud)
它将输出18319ms,这比以前的情况要糟糕得多.为什么是这样 ?
此外,如果重要,我在控制台的Chrome 26.0.1410.63上运行它.在node.js上,两个片段在控制台上都表现良好.
javascript compiler-construction optimization performance v8
背景
玉语法很棒但我想知道它是如何影响性能的.
所以我创建了一个单页应用程序,并使用apache bench来比较使用jade渲染页面与使用内存字符串的吞吐量.没有变数,所以这是纯粹的学术比较.
内存字符串使整个应用程序的本地速度提高了两倍以上,考虑到生产模式中的玉应该从内存缓存中渲染,这似乎很多.
我在生产模式下使用节点0.8和快速版本2.5.11,并且视图缓存选项显式设置为true.
阿帕奇板凳结果: https://dl.dropbox.com/u/3737990/jade/jade.png https://dl.dropbox.com/u/3737990/jade/memory.png