• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Luckyboys

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

考虑了一下(3秒钟),发现还是回来这里写技术博客吧~

从.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 );

上面一段代码

输出结果是

34044 us.
55035 us.

然而,怎么看都是第一段比第二段繁琐,而且结构没有第二段清晰, 

那么为什么第一段会比第二段执行快了这么多呢

我们可以看到第一段的代码中,只有3个if,

那么第二段会有多少个呢。

我们拆开了switch这个东西,可以去看看他的基本实现原理。

如果switch中,每一段case中都是使用break;结束的话,

其实这个switch好比多个if{}else if{}

 

所以从这个机制,我们就可以把的

 1     foreach( $arr as $key => $value )
 2     {
 3         switch( $key )
 4         {
 5             case 'attr1':
 6                 break;
 7                 
 8             case 'attr2':
 9                 break;
10                 
11             case 'attr3':
12                 break;
13         }
14     }

 

转换成

 1     foreach( $arr as $key => $value )
 2     {
 3         if( $key == 'attr1' )
 4         {
 5             ;
 6         }
 7         else if( $key == 'attr2' )
 8         {
 9             ;
10         }
11         else if( $key == 'attr3' )
12         {
13             ;
14         }
15     }

 

 

去理解,

从这里就可以看到,第二段代码会因应数组中的键的个数去不停地作出判断次数为1+2+3的判断,所以变成了第一段代码判断次数是3,而第二段代码判断次数是6次


所以就导致了执行效率相差了接近一倍的速度。 

 

posted on 2010-12-09 13:19  Luckyboys  阅读(290)  评论(2)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3