ond*_*aco 22 php micro-optimization
我正在迭代一个数组并按值将其分类为一周中的几天.
为了做到这一点,我使用了许多if陈述.如果我使用多个ifs而不是一组else if语句,它对处理速度有什么影响吗?
Jam*_*s B 46
是的,如果使用else,请考虑以下代码:
if(predicateA){
//do Stuff
}
if(predicateB){
// do more stuff
}
Run Code Online (Sandbox Code Playgroud)
的
if(predicateA){
//
}
else if(predicateB){
//
}
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,如果predicateA为true,则不需要评估predicateB(以及任何进一步的谓词)(因此整个代码将执行得更快),而在第一个示例中,如果predicateA为true,则仍然会始终对predicateB进行求值,如果谓词A和谓词B不相互排斥,你也可能会有一些意想不到的惊喜.
duf*_*ymo 18
我怀疑像这样的微优化会在代码中产生可测量的差异.
您的排序算法更有可能成为性能问题的根源.您选择哪种排序算法至关重要,没有多少"ifs"与"else if".
更新:
由于其早期退出和排他性逻辑特征,其他人提出的关于"否则如果"是更好的选择的观点表明,在这种情况下它应优先于"if".
但关于算法选择的观点仍然存在 - 除非你的数据集非常小.
很明显,O(log n)会优于O(n ^ 2),但数据集的大小也很重要.如果您只有几个元素,您可能不会注意到差异.在这种情况下,编写一个最简洁,最易读,最容易理解的低效方法一目了然可能是你最好的选择.
说实话,我不认为你在性能方面做到这一点很重要,我怀疑你会看到任何不同.我建议使用一个不是性能增强的switch语句,只是语法上更好:
switch ($day)
{
case "Monday":
// do something with Monday
break;
case "Tuesday":
// do something with Tuesday
break;
case "Wednesday":
// do something with Wednesday
break;
}
Run Code Online (Sandbox Code Playgroud)
我做了一个基准,看看连续的 if() 和 if() 之间是否存在真正的区别,然后是一些 elseif()
我放置了一个大字符串,并使用这两种方法每次执行大约 20 strpos() (x100 000),它显示了以下结果:
Try 1 : 0.5094 (including elseif)
Try 2 : 0.6700 (including only if)
Run Code Online (Sandbox Code Playgroud)
毫无疑问。我已经知道连续的 elseif() 更快,即使中间有一个 return ;在答案中加入一些统计数据仍然很好。
| 归档时间: |
|
| 查看次数: |
28895 次 |
| 最近记录: |