1

私はいつもクリーンで読みやすいコードを書く人でした。<?phpそうは言っても、タグを多かれ少なかれ使用した場合に処理速度に違いがあるかどうかはわかりませんでした。比較のためのコードは次のとおりです。

優先コード:

<?php while($condition): ?>
    <?php if($anotherCondition): ?>
        Hello world!
    <?php endif; ?>
<?php endwhile; ?>

短いコード:

<?php while($condition):
    if($anotherCondition): ?>
        Hello world!
    <?php endif;
endwhile; ?>

2番目のコードでは、2つのタグのみを使用して<?phpいますが、最初のコードブロックの方がはるかにわかりやすいことがわかります。<?phpより多くのタグを使用したために効率が低下しましたか?


構文の問題はパフォーマンスに影響を与えないので、読み取り可能なコードを記述してください:)

2番目の例も読みやすく、2つのphpブロックの代わりに4を使用する理由はありません

4

4 に答える 4

3

パフォーマンスへの影響はありますが、無視できる可能性があります。ブロック内にないスペースまたはタブ<?php ?>は、PHPスクリプトの出力の一部として送信されます。これを理解するには、次の簡単な例を検討してください。

PHPコード:

<?php while($condition): ?>
    <?php if($anotherCondition): ?>
        Hello world!
    <?php endif; ?>
<?php endwhile; ?>

としてネットワークを介して送信されます

\n
\t\n
\t\tHello world!\n
\t\n
\n

このPHPの間:

<?php while($condition):
    if($anotherCondition): ?>
        Hello world!
    <?php endif;
endwhile; ?>

これを返します:

\n
\t\tHello world!\n
\n

これはあなたが本当に心配したい種類のことではありませんが、私は読みやすいコードに行くと言います。ただし、最初の例には多くの追加の入力が含まれていると言いますが、それが優れていると確信していますか?

于 2013-01-25T00:05:10.243 に答える
3

2種類のコード+1つのスペースレス$time_start = microtime(true);バージョンをテストして、コードの前と後を導入して処理速度を確認しましたecho $time = microtime(true) - $time_start;

処理にかかる時間はマイクロ秒に近いため、結果は多くの小さな要因によって異なる場合があります。そこで、各コードを10回テストし、平均時間を作成しました。

テキストを印刷してテスト

優先コード

<?php $time_start = microtime(true); ?>

<?php $i = 0; ?>
<?php while($i <= 5000): ?>
<?php echo $i; ?>
<?php $i++; ?>
    <?php if($i == 5000): ?>
        This is the end! 
    <?php endif; ?>
<?php endwhile; ?>

<?php echo $time = microtime(true) - $time_start; ?>

平均時間:0.00366528034210207秒

短いコード

<?php

    $time_start = microtime(true);

    $i = 0;
    while($i <= 5000):
        echo $i." ";
        $i++;
        if($i == 5000):
            echo "This is the end!";
        endif;
    endwhile;

    echo $time = microtime(true) - $time_start;

?>

平均時間:0.00243649482727052秒

スペースのないコード

<?php $time_start=microtime(true);$i=0;while($i<=5000):echo $i." ";$i++;if($i==5000):echo "This is the end!";endif;endwhile;echo$time=microtime(true)-$time_start;?>

平均時間:0.00242624282836913秒

テキストを印刷せずにテスト

優先コード

<?php $time_start = microtime(true); ?>

<?php $i = 0; ?>
<?php while($i <= 5000): ?>
    <?php $i++; ?>
    <?php if($i == 5000): ?>
        <?php $a=$i; ?>
    <?php endif; ?>
<?php endwhile; ?>

<?php echo $time = microtime(true) - $time_start; ?>

平均時間:0.00143785476684571秒

短いコード

<?php

    $time_start = microtime(true);

    $i = 0;
    while($i <= 5000):
        $i++;
        if($i == 5000):
            $a=$i;
        endif;
    endwhile;

    echo $time = microtime(true) - $time_start;

?>

平均時間:0.000472831726074218秒

スペースのないコード

<?php $time_start=microtime(true);$i=0;while($i<=5000):;$i++;if($i==5000):$a=$i;endif;endwhile;echo$time=microtime(true)-$time_start;?>

平均時間:0.000457286834716797秒

結論/まとめ

印刷テキストあり
優先コード:0.00366528034210207秒
短いコード:0.00243649482727052秒(以前より33.5%高速)
スペースレスコード:0.00242624282836913秒(以前より0.4%高速)

テキストを印刷しない
場合優先コード:0.00143785476684571秒
短いコード:0.000472831726074218秒(以前より66.1%高速)
スペースのないコード:0.000457286834716797秒(以前より3.3%高速)

10回の平均は実際には正しくありません。かなり良い表現を得るには、極端な結果を削除して100回または1000回実行する必要があります。しかし、この単純な例では、最初の2つのコードの間に大きな違いがあり、3番目のコードは重要ではありません。

于 2013-01-25T02:13:42.840 に答える
3

構文の問題がパフォーマンスに影響を与えることはないので、読みやすいコードを書いてください :)

2番目の例も読みやすく、2つのphpブロックの代わりに4つを使用する理由はありません

于 2013-01-24T23:59:59.687 に答える
2

インデントがないために読めないのではないでしょうか。これが私がやる方法です。

<?php
  while($condition): //should be a colon not a semicolon
    if($anotherCondition): //should be a colon not a semicolon
?>
      Hello world!
<?php 
    endif;
  endwhile; 
?>
于 2013-01-25T00:03:47.947 に答える