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生成带有雪花背景的验证码
Sep 28 PHP
PHP通过正则表达式下载图片到本地的实现代码
Sep 19 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
Jun 21 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
Oct 16 PHP
PHP生成唯一订单号
Jul 05 PHP
Yii遍历行下每列数据的方法
Oct 17 PHP
PHP 年月日的三级联动实例代码
May 24 PHP
phpinfo无法显示的原因及解决办法
Feb 15 PHP
php文件上传原理与实现方法详解
Dec 20 PHP
laravel 框架执行流程与原理简单分析
Feb 01 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
Apr 04 PHP
基于PHP实现发微博动态代码实例
Dec 11 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
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
编写针对IE的JS代码两种编写方法
2013/01/30 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
jQuery实现选中弹出窗口选择框内容后赋值给文本框的方法
2015/11/23 Javascript
jQuery实现获取绑定自定义事件元素的方法
2015/12/02 Javascript
bootstrap网页框架的使用方法
2016/05/10 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
Vuex简单入门
2017/04/19 Javascript
浅谈Webpack核心模块tapable解析
2018/09/11 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
vue+ts下对axios的封装实现
2020/02/18 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
原生JS实现相邻月份日历
2020/10/13 Javascript
Python3基础之输入和输出实例分析
2014/08/18 Python
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
详解Python中的type和object
2018/08/15 Python
pygame实现简易飞机大战
2018/09/11 Python
python图形绘制奥运五环实例讲解
2019/09/14 Python
python 协程 gevent原理与用法分析
2019/11/22 Python
matplotlib 对坐标的控制,加图例注释的操作
2020/04/17 Python
python如何求圆的面积
2020/07/01 Python
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
香港卓悦化妆品官网:BONJOUR
2017/09/21 全球购物
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
护理不良事件检讨书
2014/02/06 职场文书
运动会获奖感言
2014/02/11 职场文书
同学聚会开幕词
2019/04/02 职场文书
PostgreSQL解析URL的方法
2021/08/02 PostgreSQL
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python