Domanda

Sono sempre utilizzando una variabile di uscita in PHP, dove raccolgo tutti i contenuti prima che io associo esso. Poi ho letto da qualche parte (non ricordo dove, però) che si ottiene le migliori prestazioni se si divide la variabile di uscita in pacchetti e poi echo ogni pacchetto al posto della variabile di uscita complesso.

Come è davvero?

È stato utile?

Soluzione

Se state l'output veramente grandi stringhe con eco, è meglio usare più istruzioni echo
.

Questo è a causa del modo algoritmo di Nagle fa sì che i dati per essere tamponata su TCP / IP.

Trovato una nota su PHP-bugs su di esso:
http://bugs.php.net/bug.php?id=18029

Altri suggerimenti

Questa si romperà automaticamente grandi archi in blocchi più piccoli e li eco out:

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

Credo che una soluzione migliore è qui presentato ....

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

........

Ragazzi, credo di ristretto la scelta ancora di più!

Come precedentemente detto, PHP buffer permetterà gara PHP alla fine dello script, ma dopo che sarà ancora “blocco” durante il tentativo di passare tutti i dati ad Apache.

Ora sono stato in grado, non solo per misurare questo (vedi commento precedente), ma in realtà per eliminare il periodo di attesa all'interno di PHP. Ho fatto che aumentando SendBuffer di Apache con la direttiva SendBufferSize.

Questo spinge i dati di PHP più veloce. Credo che il passo successivo sarebbe quello di farlo uscire di Apache più veloce ma non sono sicuro se v'è in realtà un altro strato configurabile tra Apache e la larghezza di banda grezza.

Questa è la mia versione della soluzione, echos solo se la connessione non viene interrotta. se l'utente disconnette quindi la funzione termina.

<?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');
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top