我总是使用PHP的输出变量,其中我收集所有内容之前,我回声它。然后我读的地方(我不记得在哪里,虽然),你得到最佳的性能,如果你把标准输出变量为数据包,然后呼应每个数据包,而不是整个输出变量。

如何是不是真的?

有帮助吗?

解决方案

如果您在输出回声真正的大字符串,最好是使用多个echo语句结果。

这是因为要通过TCP缓冲Nagle算法导致数据的方式/ IP。

结果

找到关于它PHP-错误的音符:结果 http://bugs.php.net/bug.php?id=18029

其他提示

这会自动分手大字符串分成较小的块和回声出来:

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

我认为一个更好的解决方案是这里提出....

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和原始网络带宽之间实际上是另一种配置层。

这是我的解决方案的版本中,它仅回声如果连接不中止。如果用户断开则该功能退出。

<?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');
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top