【发布时间】:2014-01-07 10:04:08
【问题描述】:
我正在编写一些代码,其中作为参数传入的函数有时可能未定义。对此感到好奇,这是一种不好的“做法”,我想知道什么实际上更快?给出一个空函数,还是让函数检查参数是否未定义?
我做了以下测试来尝试。答案很意外!
var timesTest = 1000;
function empty(){}
console.time('running an empty function');
for( var i=0; i<timesTest; i++ ){
empty();
}
console.timeEnd('running an empty function');
var somethingthatdoesnotexist;
console.time('checking if a function exists');
for( var i=0; i<timesTest; i++ ){
if( somethingthatdoesnotexist ){
somethingthatdoesnotexist();
}
}
console.timeEnd('checking if a function exists');
// results:
// running an empty function: 0.103ms
// checking if a function exists: 0.036ms
在低数字时,检查未定义的参数要快得多。
一旦测试的次数增加,事情就会变得有趣。
// var timesTest = 100000;
// results:
// running an empty function: 1.125ms
// checking if a function exists: 1.276ms
和
// results:
// var timesTest = 1000000000;
// running an empty function: 2096.941ms
// checking if a function exists: 2452.922ms
随着测试数量的增加,运行空白函数会稍微快一些。
我还没有尝试将其绘制在图表上,但我很好奇这种行为。有人知道为什么吗?这对现实世界的代码有何影响?
【问题讨论】:
-
“实际上更快” --- 两者都不是。更喜欢可维护性更好的东西。
-
为了让你的测试测量有意义的东西——你应该尝试运行现有的和不存在的函数。并随机挑选一个
标签: javascript performance function optimization undefined