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往windows中添加用户
Dec 06 PHP
windows下配置apache+php+mysql时出现问题的处理方法
Jun 20 PHP
php中实现精确设置session过期时间的方法
Jul 17 PHP
smarty简单入门实例
Nov 28 PHP
php使用cookie保存登录用户名的方法
Jan 26 PHP
PDO防注入原理分析以及注意事项
Feb 25 PHP
PHP回溯法解决0-1背包问题实例分析
Mar 23 PHP
php对象和数组相互转换的方法
May 12 PHP
PHP生成树的方法
Jul 28 PHP
给大家分享几个常用的PHP函数
Jan 15 PHP
PHP实现批量删除(封装)
Apr 28 PHP
Laravel学习基础之migrate的使用教程
Oct 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
BBS(php &amp; mysql)完整版(二)
2006/10/09 PHP
global.php
2006/12/09 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
Laravel访问出错提示:`Warning: require(/vendor/autoload.php): failed to open stream: No such file or di解决方法
2019/04/02 PHP
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
ExtJS4中的requires使用方法示例介绍
2013/12/03 Javascript
Javascript中的作用域和上下文深入理解
2015/07/03 Javascript
BootStrap树状图显示功能
2016/11/24 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
原生js实现仿window10系统日历效果的实例
2017/10/31 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
浅谈在vue中使用mint-ui swipe遇到的问题
2018/09/27 Javascript
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
微信小程序+腾讯地图开发实现路径规划绘制
2019/05/22 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
2019/09/25 Javascript
wxPython中文教程入门实例
2014/06/09 Python
深入讲解Python中面向对象编程的相关知识
2015/05/25 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
python pyheatmap包绘制热力图
2018/11/09 Python
详解python做UI界面的方法
2019/02/27 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
关于pandas的离散化,面元划分详解
2019/11/22 Python
CSS3中box-shadow的用法介绍
2015/07/15 HTML / CSS
CSS3绘制圆角矩形的简单示例
2015/09/28 HTML / CSS
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
海蓝之谜(LA MER)澳大利亚官方商城:全球高端奢华护肤品牌
2017/10/27 全球购物
英国高街奥特莱斯:Highstreet Outlet
2019/11/21 全球购物
小学生期末评语
2014/04/21 职场文书
大学生社会实践评语
2014/04/25 职场文书
销售岗位职责范本
2014/06/12 职场文书
土地转让协议书
2014/09/27 职场文书
幼师自荐信范文
2015/03/06 职场文书
SQLServer2019 数据库的基本使用之图形化界面操作的实现
2021/04/08 SQL Server
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js