3

私は常にPHPで出力変数を使用しており、エコーする前にすべてのコンテンツを収集します。次に、出力変数をパケットに分割し、出力変数全体ではなく各パケットをエコーすると、最高のパフォーマンスが得られることをどこかで読みました(ただし、どこかは覚えていません)。

本当にどうですか?

4

4 に答える 4

3

非常に大きな文字列を echo で出力する場合は、複数の echo ステートメントを使用することをお勧めします。

これは、Nagle のアルゴリズムがデータを TCP/IP 経由でバッファリングする方法によるものです。


それに関する Php-bugs に関するメモを見つけました:
http://bugs.php.net/bug.php?id=18029

于 2009-05-31T15:25:38.693 に答える
3

これにより、大きな文字列が自動的に小さなチャンクに分割され、エコーアウトされます。

function echobig($string, $bufferSize = 8192) {
  $splitString = str_split($string, $bufferSize);

  foreach($splitString as $chunk) {
    echo $chunk;
  }
}

ソース: http://wonko.com/post/seeing_poor_performance_using_phps_echo_statement_heres_why

于 2009-05-31T15:28:08.033 に答える
0

これは私のバージョンのソリューションです。接続が中止されていない場合にのみエコーします。ユーザーが切断すると、関数は終了します。

<?php
function _echo(){
    $args    = func_get_args();
    foreach($args as $arg){
        $strs = str_split($arg, 8192);
        foreach($strs as $str){
            if(connection_aborted()){
                break 2;
            }
            echo $str;
        }
    }
}
_echo('this','and that','and more','and even more');
_echo('or just a big long text here, make it as long as you want');
于 2016-02-16T19:02:33.710 に答える
0

より良い解決策がここに提示されていると思います....

http://wonko.com/post/seeing_poor_performance_using_phps_echo_statement_heres_why#comment-5606

.........

皆さん、さらに絞り込んだと思います!

前述のように、PHP バッファリングにより、PHP はスクリプトの最後まで競合しますが、その後、すべてのデータを Apache に渡そうとする間に「ハング」します。

これを測定するだけでなく (前のコメントを参照)、実際に PHP 内の待機期間をなくすことができました。SendBufferSize ディレクティブを使用して Apache の SendBuffer を増やすことで、これを実現しました。

これにより、データが PHP からより速くプッシュされます。次のステップは、Apache からより速くそれを取得することだと思いますが、Apache と生のネットワーク帯域幅の間に実際に別の構成可能なレイヤーがあるかどうかはわかりません。

于 2011-06-15T02:01:55.070 に答える