.NET から PHP に切り替えてから 4 年が経ち、最近、高性能を追求し始めました~~
それで、ブログを書く時期が来たと思い始めました~
まずは何かを見つけてみましょう~
コードをコピーしてください コードは次のとおりです:
$arr = array(
'attr1' => 1 ,
'attr2' => 1 ,
'attr3' => 1 ,
); ( true );
for( $i = 0 ; $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 {
foreach( $arr as $key = > $value )
{
switch ( $key )
{
case 'attr1':
break;
case 'attr3':
}
$ endTime = microtime( true );
printf ( "%d us.n" , ( $endTime - $startTime ) * 1000000 );
上記のコードの出力結果は
us です。どう見ても、最初の段落は 2 番目の段落よりも優れています 面倒で、構造は 2 番目の段落ほど明確ではありません
では、なぜ最初の段落は 2 番目の段落よりもはるかに高速に実行されるのでしょうか?コードの最初の段落には if が 3 つしかないことがわかります。
その後、2 番目の段落には if がいくつありますか?
スイッチを分解し、その基本的な実装原理を確認できます。
スイッチ内の各ケースが Break; で終わる場合、
実際、このスイッチは複数の if{}else if{} のようなものです
このメカニズムからコードをコピーできます
コードは次のとおりです:
foreach( $arr as $key => $value )
{
switch( $key )
{
case 'attr1':
break;
case 'attr3' : break; } }
に変換
コードをコピー
コードは次のとおりです:
foreach( $arr as $key => $value )
{
if( $key == 'attr1' )
{
}
else if( $key == 'attr2' )
{
} else if( $key == 'attr3' ) {
}
}
理解するには、
ここから、2番目のコードは配列内のキーの数に応じて1+2+3の数値で判定を続けるので、1番目のコードの判定となることがわかります。回数が3回
、2番目のコードの判定回数が6回
となり、実行効率が2倍近くになります。
http://www.bkjia.com/PHPjc/322581.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/322581.html
技術記事
.NET から PHP に切り替えてから 4 年が経ち、最近、高性能を追求し始めました~~ それで、ブログを書く時期が来たと思い始めました~ まずは何かを見つけましょう~ 次のようにコードをコピーします: $ arr = array( 'で...