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 相关文章推荐
使用MaxMind 根据IP地址对访问者定位
Oct 09 PHP
使PHP自定义函数返回多个值
Nov 26 PHP
用PHP写的基于Memcache的Queue实现代码
Nov 27 PHP
PHP笔记之:基于面向对象设计的详解
May 14 PHP
php环境下利用session防止页面重复刷新的具体实现
Jan 09 PHP
简单理解PHP的面向对象编程方式
May 17 PHP
PHP编写登录验证码功能 附调用方法
May 19 PHP
使用PHP免费发送定时短信的实例
Oct 24 PHP
php 读写json文件及修改json的方法
Mar 07 PHP
PHP PDO数据库操作预处理与注意事项
Mar 16 PHP
laradock环境docker-compose操作详解
Jul 29 PHP
浅谈Laravel模板实体转义带来的坑
Oct 22 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 Socket配置以及实例的详细介绍
2013/06/13 PHP
Yii实现复选框批量操作实例代码
2017/03/15 PHP
Jquery实战_读书笔记2 选择器
2010/01/22 Javascript
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
2010/03/09 Javascript
js简单设置与使用cookie的方法
2016/01/22 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
2016/10/10 Javascript
AngularJS报错$apply already in progress的解决方法分析
2017/01/30 Javascript
javascript笔记之匿名函数和闭包
2017/02/06 Javascript
原生js轮播(仿慕课网)
2017/02/15 Javascript
jquery实现手机端单店铺购物车结算删除功能
2017/02/22 Javascript
js中url对象化管理分析
2017/12/29 Javascript
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
Vue CLI 3搭建vue+vuex最全分析(推荐)
2018/09/27 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
linux 下实现python多版本安装实践
2014/11/18 Python
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
python使用pandas实现数据分割实例代码
2018/01/25 Python
Python检查ping终端的方法
2019/01/26 Python
Python笔记之facade模式
2019/11/20 Python
python 用 xlwings 库 生成图表的操作方法
2019/12/22 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
python 链接sqlserver 写接口实例
2020/03/11 Python
Python正则表达式如何匹配中文
2020/05/27 Python
python简单实现插入排序实例代码
2020/12/16 Python
Python 利用argparse模块实现脚本命令行参数解析
2020/12/28 Python
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
加拿大鞋网:Globo Shoes
2019/12/26 全球购物
音乐专业应届生教师求职信
2013/11/04 职场文书
国际会议邀请函范文
2014/01/16 职场文书
投资合作协议书
2014/04/17 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
新闻报道稿范文
2015/07/23 职场文书
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python