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 将bmp图片转为jpg等其他任意格式的图片
Jun 29 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
Apr 07 PHP
PHP 如何利用phpexcel导入数据库
Aug 24 PHP
php导入导出excel实例
Oct 25 PHP
php获取网页请求状态程序示例
Jun 17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
Jun 25 PHP
Zend Framework页面缓存实例
Jun 25 PHP
PHP四舍五入、取整、round函数使用示例
Feb 06 PHP
PHP闭包函数详解
Feb 13 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
Feb 18 PHP
CakePHP框架Model函数定义方法示例
Aug 04 PHP
让你的PHP,APACHE,NGINX支持大文件上传
Mar 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 编写的日历
2006/10/09 PHP
教你如何把一篇文章按要求分段
2006/10/09 PHP
PHP session有效期问题
2009/04/26 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
2015/03/05 PHP
Nginx下ThinkPHP5的配置方法详解
2017/08/01 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
Javascript 刷新全集常用代码
2009/11/22 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
javascript委托(Delegate)blur和focus用法实例分析
2015/05/26 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
jQuery滚动新闻实现代码
2016/06/26 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
详解NodeJs项目 CentOs linux服务器线上部署
2019/09/16 NodeJs
详解Vue的ref特性的使用
2020/01/24 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
Json实现传值到后台代码实例
2020/06/30 Javascript
JavaScript实现单点登录的示例
2020/09/23 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
常见的在Python中实现单例模式的三种方法
2015/04/08 Python
Python实现进程同步和通信的方法
2018/01/02 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
python zip()函数使用方法解析
2019/10/31 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
2020/06/06 Python
css3实现六边形边框的实例代码
2019/05/24 HTML / CSS
现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset
2012/11/09 面试题
幼儿园毕业教师感言
2014/02/21 职场文书
高中军训感言800字
2014/03/05 职场文书
车辆工程专业求职信
2014/04/28 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
电影建国大业观后感
2015/06/01 职场文书
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
2021/11/11 HTML / CSS