一篇关于PHP性能的文章
一篇关于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的数据组成

结论:
- 上面所有结果中,我发现,foreach()循环比while()和for()强一档的水平。有一点值得注意下,所有样例中每个循环开始的时候我都会使用reset()。
- 由于之前测试的版本备受争议,我必须道个歉,因为我在while循环实施reset()功能的时候是在最开始而不是结束时。非常感谢Anthony Bush这位老铁发现了这个。
修改下循环方式再来一波比较
- 如果我们改变读取循环的测试,改变为:循环读取数组结果后,对每个元素进行简单的重新赋值。它会又怎样一个结果表现呢?
还是给出一个含有100个元素的哈希数组,每个键值对是由24字节的键名和10k的数据组成

结论:
- foreach()依然吊打其他两位循环选手
计数循环之间的PK
for() VS. while()
- 循环时提前算好循环体的长度有没有必要
比如: "for ($i=0; $i<$size; $i++)" instead of "for ($i=0; $i<sizeOf($x); $i++)"

结论:
- *结果让人吃惊...这在任何程序中都是很容易去实现的一件事情,也是PHP社区普遍认可的基准,结果表明他们都是为了自己说话。
双引号单引号的较量
double (") vs. single (')
PHP中单引号和双引号效率上是否有区别呢? 比如重复使用10000多次时

结论:
*在当前的PHP版本中,这个条件下两边表现都是不俗的。让大家在这一点上和谐相处!
变量检测的较量
isSet() vs. empty() vs. is_array()

结论:
- *isset()和empty()差不多的,因此使用变量之前,尽量检查一波。例如:if (isSet($foo) AND is_array($foo))
条件控制结构的较量
switch/case/default vs. if/elseif/else
这两种流程控制结构有啥区别呢?

结论:
- *switch/case 和 if/elseif 棋逢敌手五五开,需要注意的是if/elseif 中用全等(===)比相等(==)要稍微快一些哦~
字符串输出比较
echo vs. print

结论:
- *实际上,echo 和 print 函数/结构服务很明确,因此实现他们的代码差不多。值得一提的是:在使用echo 时,用逗号分隔时,会快一些。
作者:fredGui
*来源:http://www.cnblogs.com/guixiaoming/p/8534224.html
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
一篇关于PHP性能的文章的更多相关文章
- 原博客地址http://blog.chinaunix.net/uid/20656672.html不再维护(10年前数百篇oracle/teradata性能优化、故障处理案例)
原博客地址http://blog.chinaunix.net/uid/20656672.html不再维护(数百篇oracle/teradata性能优化.故障处理原创文章) 858871 top 500 ...
- iOS开发UI篇—UITableviewcell的性能优化和缓存机制
iOS开发UI篇—UITableviewcell的性能问题 一.UITableviewcell的一些介绍 UITableView的每一行都是一个UITableViewCell,通过dataSource ...
- iOS开发UI篇—UITableviewcell的性能问题
iOS开发UI篇—UITableviewcell的性能问题 一.UITableviewcell的一些介绍 UITableView的每一行都是一个UITableViewCell,通过dataSource ...
- 前两篇转载别人的精彩文章,自己也总结一下python split的用法吧!
前言:前两篇转载别人的精彩文章,自己也总结一下吧! 最近又开始用起py,是为什么呢? 自己要做一个文本相似度匹配程序,大致思路就是两个文档,一个是试题,一个是材料,我将试题按每题分割出来,再将每题的内 ...
- 几篇关于RGBD语义分割文章的总结
最近在调研3D算法方面的工作,整理了几篇多视角学习的文章.还没调研完,先写个大概. 基于RGBD的语义分割的工作重点主要集中在如何将RGB信息和Depth信息融合,主要分为三类:省略. 目录 ...
- Android性能优化文章转载
今天看到几篇比较好的文章就转了!(链接如下) 转载注明出处:Sunzxyong Android性能优化之Bitmap的内存优化 Android性能优化之常见的内存泄漏 Android最佳实践之Syst ...
- java高并发系列 - 第27天:实战篇,接口性能成倍提升,让同事刮目相看,现学现用
这是java高并发系列第27篇文章. 开发环境:jdk1.8. 案例讲解 电商app都有用过吧,商品详情页,需要给他们提供一个接口获取商品相关信息: 商品基本信息(名称.价格.库存.会员价格等) 商品 ...
- 恕我直言你可能真的不会java第6篇:Stream性能差?不要人云亦云
一.粉丝的反馈 问:stream比for循环慢5倍,用这个是为了啥? 答:互联网是一个新闻泛滥的时代,三人成虎,以假乱真的事情时候发生.作为一个技术开发者,要自己去动手去做,不要人云亦云. 的确,这位 ...
- .NET性能系列文章一:.NET7的性能改进
这些方法在.NET7中变得更快 照片来自 CHUTTERSNAP 的 Unsplash 欢迎阅读.NET性能系列的第一章.这一系列的特点是对.NET世界中许多不同的主题进行研究.比较性能.正如标题所说 ...
随机推荐
- DNA序列组装(贪婪算法)
生物信息学原理作业第四弹:DNA序列组装(贪婪算法) 原理:生物信息学(孙啸) 大致思想: 1. 找到权值最大的边: 2. 除去以最大权值边的起始顶点为起始顶点的边: 3. 除去以最大权值边为终点为终 ...
- Windows 动态链接库编程
Windows 动态链接库编程 1.介绍Windows操作系统是应用最关的操作系统,因此动态链接库也为程序员所熟悉,即使对于普通的使用者来说,很多时候也会碰到.dll结尾的文件,这就是动态链接库文件 ...
- WPF ”真正的“高仿QQ
时常可以在各种论坛 博客 看到 各种所谓的 高仿QQ. 说实话 越看越想笑呢.(PS:纯粹的 抨击 那些 不追求 UI 完美主义者) 例如: 本次模仿 采用 C# WPF XAML , 总 ...
- xml对象序列化
public static class XSerializer { /// <summary> /// 将对象序列化为xml字符串 /// </summary> /// < ...
- [Python Study Notes]异常处理
正则表达式 python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理 断言(Assertions) python标准异常 ...
- yii2 源码分析 model类分析 (五)
模型类是数据模型的基类.此类继承了组件类,实现了3个接口 先介绍一下模型类前面的大量注释说了什么: * 模型类是数据模型的基类.此类继承了组件类,实现了3个接口 * 实现了IteratorAggreg ...
- CodeForces 820C
题意略. 这道题目的出题者竟然被hack了!? 我的思路是:在游戏开始时,为了尽量少地用字母,我应该尽量选取计算机输出的前a个字母中已经使用过的字母.但是为了使电脑也尽量少用字母,我添加的这b个字母应 ...
- Activiti获取ProcessEngine的三种方法
1.通过ProcessEngineConfiguration获取 package cn.lonecloud.mavenActivi; import org.activiti.engine.Proces ...
- uva208
一道简单的路径打印,首先需要一次dfs判断能否从1到达目标点,否则可能会超时.还有一点就是那个格式需要注意下,每条路径前没有空格(看起来好像有3个空格)-. AC代码: #include<cst ...
- UVA - 11624 多点bfs [kuangbin带你飞]专题一
题意:某人身陷火场,总有k个点着火,着火点可向四周扩散,问此人能否逃离. 思路:可能有多个着火点,以这些着火点作为起点进行bfs,得到整个火场的最短距离,然后又以人所在坐标作为起点进行bfs,得到该人 ...