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自定义函数返回多个值
Nov 26 PHP
PHP中extract()函数的定义和用法
Aug 17 PHP
解析CI的AJAX分页 另类实现方法
Jun 27 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
Mar 14 PHP
destoon各类调用汇总
Jun 20 PHP
浅析php适配器模式(Adapter)
Nov 25 PHP
windows下安装php的memcache模块的方法
Apr 07 PHP
php实现统计网站在线人数的方法
May 12 PHP
如何解决PHP无法实现多线程的问题
Sep 25 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
Mar 01 PHP
Yii2压缩PHP中模板代码的输出问题
Aug 28 PHP
php使用event扩展的io复用测试的示例
Oct 20 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设计模式 php实现访问者模式(Visitor)
2015/12/07 PHP
javascript 多浏览器 事件大全
2010/03/23 Javascript
离开页面时检测表单元素是否被修改,提示保存的js代码
2010/08/25 Javascript
javascript 实现简单的table排序及table操作练习
2012/12/28 Javascript
jquery实现带单选按钮的表格行选中时高亮显示
2013/08/01 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
2015/12/02 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
微信小程序自定义底部弹出框
2020/11/16 Javascript
JS尾递归的实现方法及代码优化技巧
2019/01/19 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
python实现在控制台输入密码不显示的方法
2015/07/02 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
2018/08/03 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
Django对数据库进行添加与更新的例子
2019/07/12 Python
python实现电子书翻页小程序
2019/07/23 Python
Python3离线安装Requests模块问题
2019/10/13 Python
selenium+python配置chrome浏览器的选项的实现
2020/03/18 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
Python绘制动态水球图过程详解
2020/06/03 Python
如何教少儿学习Python编程
2020/07/10 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
瑜伽服装品牌:露露柠檬(lululemon athletica)
2017/06/04 全球购物
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
学生安全教育材料
2014/02/14 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
2015入党自荐书范文
2015/03/05 职场文书
个人维稳承诺书
2015/05/04 职场文书
使用golang编写一个并发工作队列
2021/05/08 Golang