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加密解密的代码
Oct 09 PHP
不错的PHP学习之php4与php5之间会穿梭一点点感悟
May 03 PHP
Optimizer与Debugger兼容性问题的解决方法
Dec 01 PHP
让Json更懂中文(JSON_UNESCAPED_UNICODE)
Oct 27 PHP
php页面跳转代码 输入网址跳转到你定义的页面
Mar 28 PHP
php 模拟post_验证页面的返回状态(实例讲解)
Oct 28 PHP
php指定函数参数默认值示例代码
Dec 04 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
Nov 04 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
Mar 04 PHP
UTF-8正则表达式如何匹配汉字
Aug 03 PHP
PHP laravel中的多对多关系实例详解
Jun 07 PHP
如何判断微信付款码和支付宝付款码
Apr 01 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语法(5)
2006/10/09 PHP
jquery+ajax每秒向后台发送请求数据然后返回页面的代码
2011/01/17 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
2014/05/11 Javascript
javascript操纵OGNL标签示例代码
2014/06/16 Javascript
jQuery javascript获得网页的高度与宽度的实现代码
2016/04/26 Javascript
js实现select选择框效果及美化
2016/08/19 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
vue-router路由参数刷新消失的问题解决方法
2017/06/17 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
基于vue,vue-router, vuex及addRoutes进行权限控制问题
2018/05/02 Javascript
解决Mac安装thrift因bison报错的问题
2018/05/17 Javascript
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
2020/02/23 Javascript
uniapp实现可以左右滑动导航栏
2020/10/21 Javascript
[01:33:14]LGD vs VP Supermajor 败者组决赛 BO3 第二场 6.10
2018/07/04 DOTA
Python编程中的for循环语句学习教程
2015/10/14 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
Python @property原理解析和用法实例
2020/02/11 Python
python 错误处理 assert详解
2020/04/20 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
经典c++面试题五
2014/12/17 面试题
UNIX文件类型
2013/08/29 面试题
自主招生自荐信范文
2013/12/04 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书
结婚主持人致辞
2015/07/28 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书
python爬取豆瓣电影TOP250数据
2021/05/23 Python
Python访问Redis的详细操作
2021/06/26 Python