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 相关文章推荐
基于mysql的论坛(3)
Oct 09 PHP
vBulletin HACK----关于排版的两个HACK
Oct 09 PHP
PHP获取服务器端信息的方法
Nov 28 PHP
经典PHP加密解密函数Authcode()修复版代码
Apr 05 PHP
PHP内存使用情况如何获取
Oct 10 PHP
为你总结一些php信息函数
Oct 21 PHP
php实现微信发红包
Dec 05 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
Dec 24 PHP
PHP实现 APP端微信支付功能
Jun 22 PHP
php微信开发之图片回复功能
Jun 14 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
Jun 06 PHP
PHP7新特性
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
全国中波电台频率表
2020/03/11 无线电
PHP使用ffmpeg给视频增加字幕显示的方法
2015/03/12 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
thinkphp自定义权限管理之名称判断方法
2017/04/01 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
jquery一般方法介绍 入门参考
2011/06/21 Javascript
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
textarea 控制输入字符字节数(示例代码)
2013/12/27 Javascript
5种处理js跨域问题方法汇总
2014/12/04 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
jquery 全选、全不选、反选效果的实现代码【推荐】
2016/05/05 Javascript
js将json格式的对象拼接成复杂的url参数方法
2016/05/25 Javascript
BootStrap智能表单实战系列(九)表单图片上传的支持
2016/06/13 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
javascript代码优化的8点总结
2018/01/29 Javascript
详解如何使用webpack打包多页jquery项目
2019/02/01 jQuery
vue实现菜单切换功能
2019/05/08 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
Python解决走迷宫问题算法示例
2018/07/27 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
简单了解python数组的基本操作
2019/11/26 Python
python脚本后台执行方式
2019/12/21 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
2020/03/09 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
总结30个CSS3选择器
2017/04/13 HTML / CSS
函数指针的定义是什么
2016/08/14 面试题
班级德育工作实施方案
2014/02/21 职场文书
工作作风承诺书
2014/08/30 职场文书
股指期货心得体会
2014/09/13 职场文书
党员作风建设自查报告
2014/10/23 职场文书
写给导师的自荐信
2015/03/06 职场文书
数学备课组工作总结
2015/08/12 职场文书