php 高性能书写


Posted in PHP onDecember 11, 2010

从.NET转去做PHP4年了,最近开始追求高性能了~~
所以开始觉得是时候要写写博客了~
来段发现物先~

$arr = array( 
'attr1' => 1 , 
'attr2' => 1 , 
'attr3' => 1 , 
); 
$startTime = microtime( true ); 
for( $i = 0 ; $i < 1000 ; $i++ ) 
{ 
if( isset( $arr['attr1'] ) ) 
{ } 
if( isset( $arr['attr2'] ) ) 
{ 
} 
if( isset( $arr['attr3'] ) ) 
{ 
} 
} 
$endTime = microtime( true ); 
printf( "%d us.\n" , ( $endTime - $startTime ) * 1000000 ); 
$startTime = microtime( true ); 
for( $i = 0 ; $i < 1000 ; $i++ ) 
{ 
foreach( $arr as $key => $value ) 
{ 
switch( $key ) 
{ 
case 'attr1': 
break; 
case 'attr2': 
break; 
case 'attr3': 
break; 
} 
} 
} 
$endTime = microtime( true ); 
printf( "%d us.\n" , ( $endTime - $startTime ) * 1000000 );

上面一段代码
输出结果是
us.
us.
然而,怎么看都是第一段比第二段繁琐,而且结构没有第二段清晰,
那么为什么第一段会比第二段执行快了这么多呢
我们可以看到第一段的代码中,只有3个if,
那么第二段会有多少个呢。
我们拆开了switch这个东西,可以去看看他的基本实现原理。
如果switch中,每一段case中都是使用break;结束的话,
其实这个switch好比多个if{}else if{}

所以从这个机制,我们就可以把的

foreach( $arr as $key => $value ) 
{ 
switch( $key ) 
{ 
case 'attr1': 
break; 
case 'attr2': 
break; 
case 'attr3': 
break; 
} 
}

转换成
foreach( $arr as $key => $value ) 
{ 
if( $key == 'attr1' ) 
{ } 
else if( $key == 'attr2' ) 
{ 
} 
else if( $key == 'attr3' ) 
{ 
} 
}

去理解,
从这里就可以看到,第二段代码会因应数组中的键的个数去不停地作出判断次数为1+2+3的判断,所以变成了第一段代码判断次数是3,而第二段代码判断次数是6次

所以就导致了执行效率相差了接近一倍的速度。

PHP 相关文章推荐
php学习之变量的使用
May 29 PHP
基于PHP创建Cookie数组的详解
Jul 03 PHP
php 检查电子邮件函数(自写)
Jan 16 PHP
php开启openssl的方法
May 15 PHP
php+js实现异步图片上传实例分享
Jun 02 PHP
PHP模拟asp中response类实现方法
Aug 08 PHP
基于ThinkPHP实现批量删除
Dec 18 PHP
CI映射(加载)数据到view层的方法
Mar 28 PHP
thinkPHP数据库增删改查操作方法实例详解
Dec 06 PHP
PHP弱类型语言中类型判断操作实例详解
Aug 10 PHP
php判断IP地址是否在多个IP段内
Aug 18 PHP
PHP如何防止用户重复提交表单
Dec 09 PHP
php foreach 参数强制类型转换的问题
Dec 10 #PHP
snoopy 强大的PHP采集类使用实例代码
Dec 09 #PHP
PHPwind整合最土系统用户同步登录实现方法
Dec 08 #PHP
php iconv() : Detected an illegal character in input string
Dec 05 #PHP
php printf输出格式使用说明
Dec 05 #PHP
PHP执行zip与rar解压缩方法实现代码
Dec 05 #PHP
smarty模板嵌套之include与fetch性能测试
Dec 05 #PHP
You might like
PHP简洁函数小结
2011/08/12 PHP
如何通过Apache在本地配置多个虚拟主机
2020/07/29 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
jQuery创建自己的插件(自定义插件)的方法
2010/06/10 Javascript
浅谈JS闭包中的循环绑定处理程序
2014/11/09 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
使用jspdf生成pdf报表
2015/07/03 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
Vue实现购物车功能
2017/04/27 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
jquery ui 实现 tab标签功能示例【测试可用】
2019/07/25 jQuery
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
[02:23]DOTA2英雄基础教程 幻影长矛手
2013/12/09 DOTA
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
python批量修改文件名的实现代码
2014/09/01 Python
python复制与引用用法分析
2015/04/08 Python
Python深入06——python的内存管理详解
2016/12/07 Python
Pandas DataFrame 取一行数据会得到Series的方法
2018/11/10 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
基于Python的OCR实现示例
2020/04/03 Python
美国波西米亚风格服装品牌:Show Me Your Mumu
2018/01/05 全球购物
幼教个人求职信范文
2013/12/02 职场文书
个人自荐书
2013/12/20 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
2014年小学德育工作总结
2014/12/05 职场文书
创先争优活动个人总结
2015/03/04 职场文书
电影焦裕禄观后感
2015/06/09 职场文书
患者身份识别制度
2015/08/06 职场文书
假如给我三天光明:舟逆水而行,人遇挫而达 
2019/10/29 职场文书
导游词之青岛崂山
2019/12/27 职场文书