一篇关于PHP性能的文章

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

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

注意:你要时刻记住要多刷新几次页面来得到正确的结果,每次刷新的时候,数字都会急剧变化,我认为这是因为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版本中,这个条件下两边表现都是不俗的。让大家在这一点上和谐相处!

变量检测的较量

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

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

一篇关于PHP性能的文章的更多相关文章

  1. 原博客地址http://blog.chinaunix.net/uid/20656672.html不再维护(10年前数百篇oracle/teradata性能优化、故障处理案例)

    原博客地址http://blog.chinaunix.net/uid/20656672.html不再维护(数百篇oracle/teradata性能优化.故障处理原创文章) 858871 top 500 ...

  2. iOS开发UI篇—UITableviewcell的性能优化和缓存机制

    iOS开发UI篇—UITableviewcell的性能问题 一.UITableviewcell的一些介绍 UITableView的每一行都是一个UITableViewCell,通过dataSource ...

  3. iOS开发UI篇—UITableviewcell的性能问题

    iOS开发UI篇—UITableviewcell的性能问题 一.UITableviewcell的一些介绍 UITableView的每一行都是一个UITableViewCell,通过dataSource ...

  4. 前两篇转载别人的精彩文章,自己也总结一下python split的用法吧!

    前言:前两篇转载别人的精彩文章,自己也总结一下吧! 最近又开始用起py,是为什么呢? 自己要做一个文本相似度匹配程序,大致思路就是两个文档,一个是试题,一个是材料,我将试题按每题分割出来,再将每题的内 ...

  5. 几篇关于RGBD语义分割文章的总结

      最近在调研3D算法方面的工作,整理了几篇多视角学习的文章.还没调研完,先写个大概.   基于RGBD的语义分割的工作重点主要集中在如何将RGB信息和Depth信息融合,主要分为三类:省略. 目录 ...

  6. Android性能优化文章转载

    今天看到几篇比较好的文章就转了!(链接如下) 转载注明出处:Sunzxyong Android性能优化之Bitmap的内存优化 Android性能优化之常见的内存泄漏 Android最佳实践之Syst ...

  7. java高并发系列 - 第27天:实战篇,接口性能成倍提升,让同事刮目相看,现学现用

    这是java高并发系列第27篇文章. 开发环境:jdk1.8. 案例讲解 电商app都有用过吧,商品详情页,需要给他们提供一个接口获取商品相关信息: 商品基本信息(名称.价格.库存.会员价格等) 商品 ...

  8. 恕我直言你可能真的不会java第6篇:Stream性能差?不要人云亦云

    一.粉丝的反馈 问:stream比for循环慢5倍,用这个是为了啥? 答:互联网是一个新闻泛滥的时代,三人成虎,以假乱真的事情时候发生.作为一个技术开发者,要自己去动手去做,不要人云亦云. 的确,这位 ...

  9. .NET性能系列文章一:.NET7的性能改进

    这些方法在.NET7中变得更快 照片来自 CHUTTERSNAP 的 Unsplash 欢迎阅读.NET性能系列的第一章.这一系列的特点是对.NET世界中许多不同的主题进行研究.比较性能.正如标题所说 ...

随机推荐

  1. BZOJ 1061: [Noi2008]志愿者招募 [单纯形法]

    传送门 题意: 长为$n$的序列,第$i$位至少$b_i$,$m$种区间使$[l_i,r_i]+1$代价为$a_i$ 求满足的最小花费 复习单纯形法重做一遍 原始问题$m$个变量$n$个约束,$a_{ ...

  2. BZOJ 1119: [POI2009]SLO [置换群]

    传送门:现在$POI$上的题洛谷都有了,还要$BZOJ$干什么 和$cow\ sorting$一样,只不过问$a_i \rightarrow b_i$ 注意置换是位置而不是数值...也就是说要$i$的 ...

  3. flex 布局 input 宽度不自适应

    flex 布局 input 宽度不自适应 解决方法: 给 input 加上min-height 解决!

  4. a元素的两个重要功能和表格布局

    ⦁ 发送邮件:<a href="mailto:231455557@qq.com">联系我们</a> ⦁ 锚点两个重要应用:查看目录    提供菜单功能回到顶 ...

  5. 原生Java代码拷贝目录

    拷贝.移动文件(夹),有三方包commons-io可以用,但是有时候有自己的需求,只能使用原生java代码,这时可以用以下几种方式进行拷贝: 1.使用系统命令(Linux)调用 此种方式对操作系统有要 ...

  6. CentOS7关闭/开启防火墙出现 Unit iptables.service failed to load

    在vm中安装好tomcat,而且在liunx中使用nc命令可以返回成功,但是更换到window中访问不到tomcat的情况,是由于linux防火墙的问题造成的,传统的解决方式有2中 第一种解决方案: ...

  7. spring-boot-starter家族成员简介

    应用程序starters 以下应用程序starters是Spring Boot在org.springframework.boot组下提供的: springboot使用指南https://docs.sp ...

  8. python爬虫框架scrapy问题的解决

    2016-09-24:今天的弄了一天的scrapy的环境的配置的,linux很多的学过的事情都忘记啦.理论和实践的结合还是非常的重要的,不光要学会思考,更要学会总结纪录.还要多多回忆的和复习.学习了不 ...

  9. bash文件的详细解读

    一.bash的分类 1. 按生效范围分类 全局生效 /etc/profile /etc/profile.d/*.sh /etc/bashrc 个人用户生效 ~/.bash_profile ~/.bas ...

  10. js基本类型与引用类型,浅拷贝和深拷贝

    1. 基本类型: string,number,boolean,null,undefined 2. 引用类型: Function,Array,Object 基本类型:存放在栈内存中的简单数据段,数据大小 ...