Pergunta

Estou sempre usando uma variável de saída em PHP onde eu reunir todo o conteúdo antes de eco-lo. Então eu li em algum lugar (eu não me lembro onde, embora) que você obtenha melhor desempenho se você dividir a variável de saída em pacotes e, em seguida, echo cada pacote, em vez de toda a variável de saída.

Como é realmente?

Foi útil?

Solução

Se você está a saída realmente grandes cordas com eco, é melhor usar várias instruções de eco.

Este é por causa da maneira algoritmo do Nagle faz com que os dados sejam tamponada sobre TCP / IP.


Encontrou um nota sobre PHP-insetos sobre ele:
http://bugs.php.net/bug.php?id=18029

Outras dicas

Isso vai quebrar automaticamente grandes cordas em pedaços menores e eco-los para fora:

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

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

Fonte: http://wonko.com/post/seeing_poor_performance_using_phps_echo_statement_heres_why

Eu acho que a melhor solução é apresentada aqui ....

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

........

Gente, eu acho que eu reduzi-lo ainda mais!

Como dito anteriormente, PHP buffer vai deixar corrida PHP para o final do seu script, mas depois do que ele ainda vai “travar” ao tentar passar todos os dados para Apache.

Agora, eu era capaz, não só de medir isso (ver comentário anterior) mas para realmente eliminar o interior período de espera de PHP. Eu fiz isso através do aumento SendBuffer do Apache com a directiva SendBufferSize.

Isso empurra os dados fora do PHP mais rápido. Eu acho que o próximo passo seria para tirá-lo do Apache mais rápido, mas eu não tenho certeza se há realmente uma outra camada configurável entre Apache e a largura de banda da rede matéria.

Esta é minha versão da solução, que ecoa somente se a conexão não for abortada. se o usuário desconecta, em seguida, a função sai.

<?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');
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top