一篇关于PHP性能的文章

一篇关于PHP性能的文章

昨晚清理浏览器收藏夹网址时,发现了http://www.phpbench.com/,想起来应该是2015年发现的一个比较性能的文章,我就点进去看了看,发现仍是全英文耶,恰好最近一直在读一些英文文档和资料,就想着把它翻译下来,以供其余中国开发更有效率的阅读,好多自个人口语化,见谅~php

PHPBench.com 想用一种直观的方式去陈述一个事实,让人们明白不是每段PHP代码都能以相同的方式运行。你可能会对产生的结果感到惊讶,可是不要怀疑--it's ok。一些被测试统计过的代码样例的页面也被建立了,你能够下载而后在本身的服务器环境运行测试,你能够结合本身的想法,对这些实例进行一顿操做~~html

注意:你要时刻记住要多刷新几回页面来获得正确的结果,每次刷新的时候,数字都会急剧变化,我认为这是由于PHP的内存垃圾回收机制是随机的而且这个机器上其余的进程对此也有影响。数组

注意:为了方便我就简单的使用了microtime()函数来测试这用例。若是使用了更高级的东西,我担忧一些初级phper理解不了。浏览器

循环读取数据的比较

foreach() vs. for vs. while(list() = each())
  • 循环读取一个哈希数组最好的方式是怎样的?
  • 给出一个含有100个元素的哈希数组,每一个键值对是由24字节的键名和10k的数据组成
    服务器

    结论:

  1. 上面全部结果中,我发现,foreach()循环比while()for()强一档的水平。有一点值得注意下,全部样例中每一个循环开始的时候我都会使用reset()
  2. 因为以前测试的版本备受争议,我必须道个歉,由于我在while循环实施reset()功能的时候是在最开始而不是结束时。很是感谢Anthony Bush这位老铁发现了这个。

修改下循环方式再来一波比较

  • 若是咱们改变读取循环的测试,改变为:循环读取数组结果后,对每一个元素进行简单的从新赋值。它会又怎样一个结果表现呢?
  • 仍是给出一个含有100个元素的哈希数组,每一个键值对是由24字节的键名和10k的数据组成
    函数

    结论:

  1. foreach()依然吊打其余两位循环选手

计数循环之间的PK

for() VS. while()
  • 循环时提早算好循环体的长度有没有必要
  • 好比: "for ($i=0; $i<$size; $i++)" instead of "for ($i=0; $i<sizeOf($x); $i++)"
    性能

    结论:

  1. *结果让人吃惊...这在任何程序中都是很容易去实现的一件事情,也是PHP社区广泛承认的基准,结果代表他们都是为了本身说话。

双引号单引号的较量

double (") vs. single (')
  1. PHP中单引号和双引号效率上是否有区别呢? 好比重复使用10000屡次时
    测试

    结论:

  2. *在当前的PHP版本中,这个条件下两边表现都是不俗的。让你们在这一点上和谐相处!ui

变量检测的较量

isSet() vs. empty() vs. is_array()

结论:

  1. *isset()和empty()差很少的,所以使用变量以前,尽可能检查一波。例如:if (isSet($foo) AND is_array($foo))

条件控制结构的较量

switch/case/default vs. if/elseif/else
  • 这两种流程控制结构有啥区别呢?
    翻译

    结论:

  1. *switch/case 和 if/elseif 棋逢敌手五五开,须要注意的是if/elseif 中用全等(===)比相等(==)要稍微快一些哦~

字符串输出比较

echo vs. print

结论:

  1. *实际上,echo 和 print 函数/结构服务很明确,所以实现他们的代码差很少。值得一提的是:在使用echo 时,用逗号分隔时,会快一些。

做者:fredGui

*来源:http://www.cnblogs.com/guixiaoming/p/8534224.html

著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。