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 代码优化之经典示例
Mar 24 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
Feb 05 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
Jun 17 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
Jun 27 PHP
php中count获取多维数组长度的方法
Nov 03 PHP
学习php开源项目的源码指南
Dec 21 PHP
php获取字符串中各个字符出现次数的方法
Feb 23 PHP
php结合md5实现的加密解密方法
Jan 25 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
Feb 15 PHP
再谈PHP中单双引号的区别详解
Jun 12 PHP
可兼容php5与php7的cURL文件上传功能实例分析
May 11 PHP
YII框架http缓存操作示例
Apr 29 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下将XML转换为数组
2010/01/01 PHP
JavaScript 替换Html标签实现代码
2009/10/14 Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
JS date对象的减法处理实现代码
2010/12/28 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
Jquery中offset()和position()的区别分析
2015/02/05 Javascript
jQuery实现下拉加载功能实例代码
2016/04/01 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
纯javascript前端实现base64图片下载(兼容IE10+)
2018/09/14 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
python实现360皮肤按钮控件示例
2014/02/21 Python
Python中类的继承代码实例
2014/10/28 Python
关于python pyqt5安装失败问题的解决方法
2017/08/08 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
python获取依赖包和安装依赖包教程
2020/02/13 Python
python标准库OS模块详解
2020/03/10 Python
Python 发送邮件方法总结
2020/08/10 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
澳大利亚在线家具、灯饰和家居装饰店:LivingStyles
2018/11/20 全球购物
学生会竞选自荐信
2013/10/12 职场文书
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
简历中自我评价怎么写
2014/02/12 职场文书
优秀团员自我评价范文
2014/04/23 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
2016计划生育先进个人事迹材料
2016/02/29 职场文书
2019年销售人员的职业生涯规划书
2019/03/25 职场文书
心得体会该怎么写呢?
2019/06/27 职场文书
MySQL 使用SQL语句修改表名的实现
2021/04/07 MySQL
Java反应式框架Reactor中的Mono和Flux
2021/07/25 Java/Android
游戏《我的世界》澄清Xbox版暂无计划加入光追
2022/04/03 其他游戏