性能:if else vs switch,而vs for,for each vs for,print vs printf

时间:2014-12-26 22:46:47

标签: php performance loops conditional-statements

我正在使用getrusage()测试所有这些不同的结构来计算(ru_utime + ru_stime)执行前后的变化。
事实证明,执行相同的任务对于类似的任务没有什么区别结构体。结果如下:与printf相比print(1.5±0.5)%foreachforfor(6.0±1.0)%while循环(迭代1kk元素的索引数组)与if/else循环相比switch(9.0±1.0)%if/else(8.0±1.0)%快于switch(测试超过两个案例,6个案例和10个可能的案例)。

所以我想知道,这些差异真的很重要吗?如果我们在代码中使用所有最有效的此类构造,它会有所不同吗?可能有6%,8%,9%或10%,总结会改变我们代码的效率吗?或者这些差异仍然不明显,我的意思是服务器对请求的响应几乎不会变化?此外,如果我们使用for超过whileprintf超过printforeach超过for,{{1}}超过{{1}}它会占用更多内存吗?

3 个答案:

答案 0 :(得分:2)

在效果方面使用StackOverflow个答案回答您的问题:

对于if/else vs switch:性能相同(more)。

for vs foreach vs while:不重要(more)。

对于printf vs print:一个不比另一个好(more)。

我的拙见是,你使用对你来说更舒服的东西和/或更好地满足你的需求(彼此之间略有差异,换句话说除了表现之外,这取决于你需要什么)。在性能方面,为了最大限度地提高性能,还应该注意其他一些事项,例如降低程序中使用的代码的O复杂性,网络延迟处理,需要时并行化任务等等。问题有点笼统,所以我试着以同样的方式回答。

答案 1 :(得分:0)

  1. 你是对的。几个百分点并不重要。
  2. 操作的可扩展性可以比这几个百分比更显着地影响应用程序的性能。从这个意义上讲,可伸缩性意味着如果您收到的数据量增加2倍,10倍,系统将如何运行。你的系统是否会减慢2倍,10倍(如果它是线性的),或4倍,100倍(二次)等。http://en.wikipedia.org/wiki/Scalability
  3. 此问题通常发生在数据库端,如其他提到的那样。有"大"操作。有些数据可能很大。
  4. 大多数开发人员不必过多关注资源。是的。分析是处理性能问题的正确方法。

答案 2 :(得分:0)

OP写道:

  

这些差异真的很重要吗?如果我们在代码中使用所有最有效的此类构造,它会有所不同吗?

嗯,是的,不是。您在编写超低延迟应用程序吗?硬(确定性)实时应用程序?如果是,那么是的。等待用户的键盘输入?这是一个奇迹,你的CPU不会因无聊而死。所以,没有。

9%的差异可以忽略不计(你的精灵 - 主不会杀死巨魔),或者它可能非常重要(你的祖母的生命支持系统会杀死她)。

基本上,这不是一个可以在这里回答的问题。撇开环境/执行/编译器优化问题:它不仅是书本长度的主题,而且具体的书将取决于你在谈论什么类型的程序,以及对性能范围的后果和要求是什么。我猜想,对于99.99%的程序员来说,switchif/else语句或类似的窥视孔优化之间的差异(实际上)绝对为零。

古老的格言"让它可读,让它运行,然后让它快速运行,如果你必须"可能是你最好的行动方案。即使在极其罕见的情况下,它可能很重要,只需确保使用分析器来确定"其中" "让它快速运行的一部分"阶段真的需要。