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.MVC的模板标签系统(一)
Sep 05 PHP
php笔记之:文章中图片处理的使用
Apr 26 PHP
CodeIgniter图像处理类的深入解析
Jun 17 PHP
php用户注册页面利用js进行表单验证具体实例
Oct 17 PHP
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
Dec 02 PHP
php实现查看邮件是否已被阅读的方法
Dec 03 PHP
php 批量查询搜狗sogou代码分享
May 17 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
May 19 PHP
php实现将HTML页面转换成word并且保存的方法
Oct 14 PHP
PHP缩略图生成和图片水印制作
Jan 07 PHP
PHP Web表单生成器案例分析
Jun 02 PHP
swoole锁的机制代码实例讲解
Mar 04 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使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
php查询操作实现投票功能
2016/05/09 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
javascript 窗口加载蒙板 内嵌网页内容
2010/11/19 Javascript
window.name代替cookie的实现代码
2010/11/28 Javascript
script的async属性以非阻塞的模式加载脚本
2013/01/15 Javascript
Jquery和JS用外部变量获取Ajax返回的参数值的方法实例(超简单)
2013/06/17 Javascript
浅析JS刷新框架中的其他页面 &amp;&amp; JS刷新窗口方法汇总
2013/07/08 Javascript
jquery遍历checkbox的注意事项说明
2014/02/21 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
Node.js简单入门前传
2017/08/21 Javascript
Nodejs实现爬虫抓取数据实例解析
2018/07/05 NodeJs
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
微信小程序仿知乎实现评论留言功能
2018/11/28 Javascript
javascript实现小型区块链功能
2019/04/03 Javascript
Centos7 安装Node.js10以上版本的方法步骤
2019/10/15 Javascript
js代码编写无缝轮播图
2020/09/13 Javascript
nuxt 服务器渲染动态设置 title和seo关键字的操作
2020/11/05 Javascript
[02:04]完美世界城市挑战赛秋季赛报名开始 谁是solo路人王?
2019/10/10 DOTA
Python程序设计入门(3)数组的使用
2014/06/16 Python
Python脚本实现下载合并SAE日志
2015/02/10 Python
Python中使用strip()方法删除字符串中空格的教程
2015/05/20 Python
Python数据类型详解(四)字典:dict
2016/05/12 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
python 字典修改键(key)的几种方法
2018/08/10 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
2019/07/06 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
python urllib和urllib3知识点总结
2021/02/08 Python
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
失业者真诚求职信范文
2013/12/25 职场文书
cf收人广告词
2014/03/14 职场文书
学生检讨书如何写
2014/10/30 职场文书
golang内置函数len的小技巧
2021/07/25 Golang
MySQL数据库如何查看表占用空间大小
2022/06/10 MySQL
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android