什么更快?运行空函数或检查函数是否未定义
What is faster? Running an empty function or checking if function is undefined?
我正在编写一些代码,其中作为参数传入的函数有时可能未定义。出于对这种不良"做法"的好奇,我想知道实际上什么更快?给出一个空函数,或者让函数检查参数是否未定义?
我做了以下测试来尝试。答案非常令人惊讶!
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
-
这是微优化。没有人会注意到差异。十亿次迭代的差异不到半秒,这永远不会发生。做你认为更具可读性的事情;不用担心性能。
相关文章:
- 检查onsubmit doenst work jquery contactform上的函数
- Javascript函数检查日期
- Javascript 函数检查
- 使用 jQuery 函数检查表中的可编辑列
- Javascript 函数检查公式器中的所有输入不起作用
- 使用 JavaScript + jQuery 函数检查表行冗余的性能降低
- 如何使用JavaScript函数检查文本框的两个值
- 使用Array.every()函数检查是否定义了所有值
- 测试一个由承诺返回的函数——检查错误
- jQuery函数检查文本框
- Javascript函数检查vb变量
- 如何在AngularJS上使用service函数检查一个包db文档是否存在
- jquery.each函数检查另一个选择器并删除重复项
- 用可重用的函数检查表单值
- JS函数检查所有的复选框,这是不需要的
- 根据字符串和do函数检查ng-model的值
- 函数检查字符串并更改它们
- 函数检查第一个空白单元格
- 对于我的函数检查算法,是否有更好的替代eval() ?
- 如何使用javascript函数检查字段是否已填充数据