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 相关文章推荐
图象函数中的中文显示
Oct 09 PHP
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
Oct 09 PHP
php防注
Jan 15 PHP
逐步提升php框架的性能
Jan 10 PHP
PHP去除数组中重复的元素并按键名排序函数
Aug 18 PHP
色色整理的PHP面试题集锦
Mar 08 PHP
在PHP中运行Linux命令并启动SSH服务的例子
Jun 12 PHP
php读取远程gzip压缩网页的方法
Dec 29 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
Apr 03 PHP
合格的PHP程序员必备技能
Nov 13 PHP
Laravel 队列使用的实现
Jan 08 PHP
PHP文件上传小程序 适合初学者学习!
May 23 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
广播爱好者需要了解的天线知识
2021/03/01 无线电
php生成图形验证码几种方法小结
2013/08/15 PHP
PHP并发多进程处理利器Gearman使用介绍
2016/05/16 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
关于window.pageYOffset和document.documentElement.scrollTop
2011/04/05 Javascript
基于jquery的不规则矩形的排列实现代码
2012/04/16 Javascript
javascript中负数算术右移、逻辑右移的奥秘探索
2013/10/17 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
node.js中的fs.statSync方法使用说明
2014/12/16 Javascript
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
jQuery获取复选框被选中数量及判断选择值的方法详解
2016/05/25 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
关于动态生成dom绑定事件失效的原因及解决方法
2016/08/06 Javascript
js 获取html5的data属性实现方法
2017/07/28 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
[00:32]DOTA2上海特级锦标赛 Ehome战队宣传片
2016/03/03 DOTA
Python下rrdtool模块的基本使用方法
2015/11/13 Python
Python中的单行、多行、中文注释方法
2018/07/19 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
2018/11/29 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
Python递归实现打印多重列表代码
2020/02/27 Python
HTML5仿手机微信聊天界面
2016/03/18 HTML / CSS
Ratchet 模态框的实现
2020/08/19 HTML / CSS
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
do you have any Best Practice for testing
2016/06/04 面试题
音乐专业应届生教师求职信
2013/11/04 职场文书
金融专业推荐信
2013/11/14 职场文书
图书室管理制度
2014/01/19 职场文书
社会实践评语
2014/04/28 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
学校社会实践活动总结
2014/07/03 职场文书
党员个人对照检查材料
2014/10/01 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
六一文艺汇演开幕词
2015/01/29 职场文书
Spring this调用当前类方法无法拦截的示例代码
2022/03/20 Java/Android