一篇关于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. C# 使用 Lotus notes 公共邮箱发送邮件

    公司的邮件系统用的是反人类的 Lotus notes, 你敢信? 最近要实现一个功能,邮件提醒功能,就是通过自动发送提醒邮件 前前后后这个问题搞了2天,由于公司的诸多条件限制,无法直接调用到公司发送邮 ...

  2. selenium headlesschrome下设置最大窗口模式

    做微博登录的时候,用selenium的chrome界面模式,可以用下面方式显示最大窗口: from selenium.webdriver.chrome.options import Options c ...

  3. SSE图像算法优化系列十六:经典USM锐化中的分支判断语句SSE实现的几种方法尝试。

    分支判断的语句一般来说是不太适合进行SSE优化的,因为他会破坏代码的并行性,但是也不是所有的都是这样的,在合适的场景中运用SSE还是能对分支预测进行一定的优化的,我们这里以某一个算法的部分代码为例进行 ...

  4. vue调试工具之 vue-devtools的安装

    这里介绍一下vue-devtools的安装方法之一: chrome浏览器的应用商店不能直接访问(需要跨域),所以直接应用商店安装的方法就行不通了. 1.到github主页去下载安装: git clon ...

  5. [Python Study Notes]字典操作

    字典操作 a.增加 >>> info["stu1104"] = "abc" >>> info {'stu1102': 'x5 ...

  6. Java面试题库及答案解析

    1.面向对象编程(OOP)有哪些优点? 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码的可理解性. 2.面向对象编程有哪些特性? 封装.继承.多态.抽象 封装 封装 ...

  7. 获取登陆用户的ip

    function getip(){     static $ip = null;     if($ip !=null) return $ip;     if(getenv('REMOTE_ADDR') ...

  8. css的一些复习

    css,全称Cascading Style Sheets,层叠样式表. css选择器是从右往左解析的,解析速度会比较快. 选择器 选择器权重 !important 优先级最高 元素属性 优先级高 相同 ...

  9. UVA - 10118 Free Candies 记忆化搜索经典

    思路:d[a][b][c][d]表示从已经第一个篮子取了a颗糖,第二个取了b颗糖,第三个取了c颗糖,第四个取了d颗糖最多还能够获得多少糖果.首先明白一个问题:如果能分别取a,b,c,d个,不论如何取, ...

  10. mybatis与spring的整合(使用接口实现crud)

    本人刚刚接触mybatis,今天把它和spring整合起来用了一个上午==. 一开始是通过配置文件来配置,后来尝试用了一下注解,觉得mybatis的注解真的有点恶心...一大坨的,所以我还是建议使用配 ...