我正在编写一些代码,其中作为参数传入的函数有时可能未定义.我很好奇这是一个糟糕的“练习”,我想知道什么实际上更快?给一个空函数,或者让函数检查参数是否未定义?
我做了以下测试试试.答案非常令人惊讶!
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
我还没有尝试在图表上绘制这个,但我很好奇这个行为.有人知道为什么吗?这对现实代码中的事情有何影响?
解决方法
>
http://jsperf.com更准确的基准测试和花式图表.我做了一个:
http://jsperf.com/empty-vs-check >这是微优化.没有人会注意到差异.十亿次迭代的差异不到半秒,这种情况永远不会发生.做你认为更可读的事情;不要担心性能.