一篇关于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世界中许多不同的主题进行研究.比较性能.正如标题所说 ...
随机推荐
- COGS 2479. [HZOI 2016]偏序 [CDQ分治套CDQ分治 四维偏序]
传送门 给定一个有n个元素的序列,元素编号为1~n,每个元素有三个属性a,b,c,求序列中满足i<j且ai<aj且bi<bj且ci<cj的数对(i,j)的个数. 对于100%的 ...
- VUE 2.0 引入高德地图,自行封装组件
1. 高德地图官网 申请帐号, 申请相应(JavaScript API)的 Key 2. 在项目中引入, 这里和其他的引入不同的是 直接在 index.html, 不是在 main.js 引入, 博主 ...
- 数据分析之pandas教程-----概念篇
目录 1 pandas基本概念 1.1 pandas数据结构剖析 1.1.1 Series 1.1.2 DataFrame 1.1.3 索引 1.1.4 pandas基本操作 1.1.4. ...
- c# Nlog 非xml cs方法配置
public static void InitLog(TargetWithLayout target = null, string level = "Debug", string ...
- 使用IntelliJ IDEA(PHPStorm)和xdebug在firefox、chrome中远程调试PHP
很多PHP程序员都习惯于使用echo.var_dump和exit来中断和调试web应用程序,本文主要介绍结合xdebug.IntelliJ IDEA.Firefox/chrome/IE来远程调试PHP ...
- redis新手入门,摸不着头脑可以看看<一>
公司在用redis,但我并不会.所以需求就来了.. redis的好处坏处自己百度就好我也不去复制黏贴了. ----------------------------------------------- ...
- DataGrid 拖动 附加属性类
项目需要实现一个DataGrid拖动排序,于是参考网上一些资源然后,修改了下实现了一个附加属性类,如下 使用方法 <DataGrid x:Name="shareGrid" t ...
- Kudu存储实战笔记
有人会问,为啥要用这个叫啥Kudu的,Kudu是啥? 就像官网所说,Kudu是一个针对Apache hadoop 平台而开发的列式存储管理器,在本菜鸟看来,它是一种介于hdfs与hbase的一种存储. ...
- 在 CentOS7.0 上搭建 Chroot 的 Bind DNS 服务器
BIND(Berkeley internet Name Daemon)也叫做NAMED,是现今互联网上使用最为广泛的DNS 服务器程序.这篇文章将要讲述如何在 chroot 监牢中运行 BIND,这样 ...
- 平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小。
题目:平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小. 源码如下: #include <iostream> #include <string.h> #incl ...