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操作sqlserver关于时间日期读取的小小见解
Nov 29 PHP
Php Mssql操作简单封装支持存储过程
Dec 11 PHP
php array_intersect比array_diff快(附详细的使用说明)
Jul 03 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
Apr 09 PHP
PHP漏洞全解(详细介绍)
Nov 13 PHP
分享一个超好用的php header下载函数
Jan 31 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
PHP统计数值数组中出现频率最多的10个数字的方法
Apr 20 PHP
PHP符合PSR编程规范的实例分享
Dec 21 PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 PHP
thinkphp5框架API token身份验证功能示例
May 21 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
Sep 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伪造Referer请求反盗链资源
2019/01/24 PHP
PHP正则表达式笔记与实例详解
2019/05/09 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
javascript延时加载之defer测试
2012/12/28 Javascript
jQuery选择id属性带有点符号元素的方法
2015/03/17 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
jquery+css3实现的经典弹出层效果示例
2020/05/16 jQuery
python获取外网ip地址的方法总结
2015/07/02 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
Flask之请求钩子的实现
2018/12/23 Python
Python学习笔记之pandas索引列、过滤、分组、求和功能示例
2019/06/03 Python
Python3 assert断言实现原理解析
2020/03/02 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
python实现计算器简易版
2020/12/17 Python
Python爬虫+Tkinter制作一个翻译软件的示例
2021/02/20 Python
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
StubHub希腊:购买体育赛事、音乐会和剧院门票
2019/08/03 全球购物
工作表扬信的范文
2014/01/10 职场文书
村委会主任先进事迹
2014/01/15 职场文书
暑期社会实践感言
2014/02/25 职场文书
秋季开学典礼主持词
2014/03/19 职场文书
工程质量承诺书范文
2014/03/27 职场文书
防沙治沙典型材料
2014/05/07 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
大学生助学金感谢信
2015/01/21 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL