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 相关文章推荐
Search Engine Friendly的URL设计
Oct 09 PHP
自动把纯文本转换成Web页面的php代码
Aug 27 PHP
PHP+XML 制作简单的留言本 图文教程
Nov 02 PHP
在PHP中养成7个面向对象的好习惯
Jan 28 PHP
CI框架中cookie的操作方法分析
Dec 12 PHP
PHP aes (ecb)解密后乱码问题
Jun 22 PHP
PHP中for循环与foreach的区别
Mar 06 PHP
谈谈从phpinfo中能获取哪些值得注意的信息
Mar 28 PHP
ThinkPHP实现图片上传操作的方法详解
May 08 PHP
详解Yii2 之 生成 URL 的方法
Jun 16 PHP
PHP编程实现阳历转换为阴历的方法实例
Aug 08 PHP
php如何计算两坐标点之间的距离
Dec 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一些常用的正则表达式字符的一些转换
2008/07/29 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
2013/06/18 PHP
php替换字符串中间字符为省略号的方法
2015/05/04 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
2009/11/14 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
2014/10/19 Javascript
Bootstrap中表单控件状态(验证状态)
2016/08/04 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
基于javaScript的this指向总结
2017/07/22 Javascript
快速了解vue-cli 3.0 新特性
2018/02/28 Javascript
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
vue里input根据value改变背景色的实例
2018/09/29 Javascript
微信小程序自定义波浪组件使用方法详解
2019/09/21 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
Python中itertools模块用法详解
2014/09/25 Python
python中global与nonlocal比较
2014/11/21 Python
Python解惑之True和False详解
2017/04/24 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
关于python2 csv写入空白行的问题
2018/06/22 Python
python如何制作英文字典
2019/06/25 Python
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
python+tkinter实现学生管理系统
2019/08/20 Python
Django接收照片储存文件的实例代码
2020/03/07 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
阻止移动设备(手机、pad)浏览器双击放大网页的方法
2014/06/03 HTML / CSS
简洁自适应404页面HTML好看的404源码
2020/12/16 HTML / CSS
实习销售业务员自我鉴定
2013/09/21 职场文书
中国好声音华少广告词
2014/03/17 职场文书
幼儿园优秀班主任事迹材料
2014/05/14 职场文书
初中毕业典礼演讲稿
2014/09/09 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js
python之基数排序的实现
2021/07/26 Python