Frage

Ich verwende immer eine Ausgangsgröße in PHP, wo ich alle Inhalte sammeln, bevor ich es Echo. Dann las ich irgendwo (ich weiß nicht mehr, wo, obwohl), dass Sie die beste Leistung, wenn man die Ausgangsgröße in Pakete aufgeteilt und Echo dann jedes Pakets anstelle der gesamten Ausgangsgröße.

Wie ist es wirklich?

War es hilfreich?

Lösung

Wenn Sie wirklich große Strings mit Echo ausgeben, ist es besser, mehr Echo-Anweisungen zu verwenden.

Dies ist wegen der Art und Weise Nagle-Algorithmus Daten bewirkt, dass über TCP gepuffert werden / IP.


einen Hinweis auf Php-bugs darüber gefunden:
http://bugs.php.net/bug.php?id=18029

Andere Tipps

Dies wird automatisch große Strings in kleinere Stücke brechen und Echo sie aus:

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

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

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

Ich denke, eine bessere Lösung hier präsentiert wird ....

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

........

Leute, ich glaube, ich es verengte noch weiter nach unten!

Wie zuvor gesagt, PHP Pufferung PHP-Rennen bis zum Ende des Skripts lassen wird, aber nach, als es noch „hängen“ bei dem Versuch, all diese Daten auf Apache zu übergeben.

Nun war ich in der Lage, nicht nur zu messen, dies (siehe vorherigen Kommentar), aber tatsächlich die Wartezeit innerhalb von PHP zu beseitigen. Ich habe das von Apache-Sendepuffer mit der Richtlinie Sendbuffersize erhöhen.

Dies drückt die Daten aus PHP schneller. Ich denke, der nächste Schritt wäre es schneller aus Apache zu bekommen, aber ich bin nicht sicher, ob es tatsächlich ein andere konfigurierbare Schicht zwischen Apache und der rohen Netzwerkbandbreite.

Dies ist meine Version der Lösung, es Echos nur dann, wenn die Verbindung nicht abgebrochen. wenn der Benutzer trennt dann die Funktion beendet.

<?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');
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top