一篇关于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 3991: [SDOI2015]寻宝游戏 [虚树 树链的并 set]

    传送门 题意: $n$个点的树,$m$次变动使得某个点有宝物或没宝物,询问每次变动后集齐所有宝物并返回原点的最小距离 转化成有根树,求树链的并... 两两树链求并就可以,但我们按照$dfs$序来两两求 ...

  2. Getting the pixel coordinates of text or ticks in matplotlib

    The exact pixel coordinates of title, labels, legends or ticks are important information for the tra ...

  3. Redis 学习(一) —— 安装、通用key操作命令

    一.Redis介绍 1.介绍 通常,在系统中,我们会把数据交由数据库来存储,但传统的数据库增删查改的性能较差,且比较复杂.根据 80/20 法则,百分之八十的业务访问集中在百分之二十的数据上.是否可以 ...

  4. shell编程值之shell流程控制(7)

    条件判断式 1 按照文件类型判断(常用类型) 测试类型 作用 -d 文件 判断该文件是否存在,并且是否为目录文件(是目录文件为真) -e 文件 判断该文件是否存在(存在为真) -f 文件 判断该文件是 ...

  5. python入门学习笔记(一)

    写在开头:         A:python的交互式环境                                                                         ...

  6. 插入排序实现&&选择排序实现

    萌新刚刚开始学习算法,第一步是学习排序,毕竟算法的四大块"排序,查找,图,字符串"里面,排序是第一位的(PS:今天才知道算法提供的只是一个程序编写思路,一直以为是一个函数,难怪传入 ...

  7. Spring Data与elasticsearch版本对应关系

  8. Yii2中DAO

    数据库访问 (DAO) 创建数据库连接 执行 SQL 查询 引用表和列名称 执行事务 复制和读写分离 操纵数据库模式 Yii 包含了一个建立在 PHP PDO 之上的数据访问层 (DAO).DAO为不 ...

  9. xBIM WeXplorer 设置模型颜色

    目录 基础 xBIM WeXplorer 简要介绍 xBIM WeXplorer xViewer 基本应用 xBIM WeXplorer xViewer 浏览器检查 xBIM WeXplorer xV ...

  10. 聊聊JavaScript-闭包

    今天聊聊闭包,网上五花八门的定义和解释很多很多,是不是搞得你很懵逼:每次看闭包,都不同,本来自己懂,看完别人的之后就开始怀疑自己了.在我看来,闭包简单的说就是函数里面套函数,再往大了说就是我函数外面想 ...