【发布时间】:2013-06-21 20:59:33
【问题描述】:
是否可以安全地假设对于时间要求严格的应用程序,使用函数声明或函数表达式总是比在大量执行的回调中使用内联函数更好?
考虑以下测试程序:
var x;
var count3 = function count3() {
x++;
}
var count2 = function () {
x++;
}
function count() {
x++;
}
function execute(cb) {
cb();
}
x = 0;
var a = new Date().getTime();
for (var i = 0; i < 100000000; i++) {
execute(function named() {
x++;
})
}
a = new Date().getTime() - a;
console.log("Named inline function: " + a);
x = 0;
a = new Date().getTime();
for (var i = 0; i < 100000000; i++) {
execute(function () {
x++;
})
}
a = new Date().getTime() - a;
console.log("Anonymous inline function: " + a);
x = 0;
a = new Date().getTime();
for (var i = 0; i < 100000000; i++) {
execute(count);
}
a = new Date().getTime() - a;
console.log("Function declaration: " + a);
x = 0;
a = new Date().getTime();
for (var i = 0; i < 100000000; i++) {
execute(count2);
}
a = new Date().getTime() - a;
console.log("Anonymous function expression:" + a);
x = 0;
a = new Date().getTime();
for (var i = 0; i < 100000000; i++) {
execute(count3);
}
a = new Date().getTime() - a;
console.log("Named function expression:" + a);
这给出以下输出(以毫秒为单位):
Named inline function: 2347
Anonymous inline function: 2121
Function declaration: 771
Anonymous function expression:750
Named function expression:752
在我简陋的笔记本电脑上,函数声明和函数表达式比内联函数快 3 倍。
【问题讨论】:
-
这是否可以概括?例如。总是尝试在大量执行的回调中使用函数声明而不是内联函数
-
把你的代码放到jshint.com,是的,你不应该在循环中内联函数。
-
在Stack Exchange Code Review上可能会得到更好的答案
-
@Ghillied:为什么?这是一个有效的问题,他并没有真正需要审查的代码。计时测试套件及其结果可能更适合答案,但它们没问题。
-
@SeppVanRompaey - 你为什么不使用jsPerf 或Benchmark.js?
标签: javascript performance node.js optimization