Frage

Ich habe eine Menge von ob_get_clean() der letzten Zeit gesehen. Normalerweise habe ich getan $test .= 'test'

Ich frage mich, wenn man schneller und / oder besser als die andere.

Hier ist der Code mit ob_get_clean():

ob_start();

foreach($items as $item) {
    echo '<div>' . $item . '</div>';
}

$test = ob_get_clean();

Hier ist der Code mit $test .= 'test':

$test = '';

foreach($items as $item) {
    $test .= '<div>' . $item . '</div>';
}

Was ist besser?

War es hilfreich?

Lösung

Die Ausgabepuffer haben alle die Gefahren der globalen Variablen. Sie haben von der ob_start() zum ob_get_clean() bewusst alle Ausführungspfade sein. Sind Sie sicher, dass es dort bekommen, und dass alle Puffer geöffnet dazwischen geschlossen werden können? Denken Sie, dass Code Geist kann Ausnahmen auslösen. Das kann einen wirklich Spaß Fehler sein, dass der nächste Mann auf der Spur.

Auf der anderen Seite - und ich hasse es sogar zu nennen - zu einer Zeit Ausgabepufferung war etwas schneller bei großen Strings verketten, aus Gründen intern zu PHP. Ich bin mir nicht sicher, ob das noch wahr ist.

Andere Tipps

Die Ergebnisse sind die gleichen, und ich würde die Leistungsunterschiede sind zu vernachlässigen, wenn jeder vorstellen. Grundsätzlich ist eine Frage der persönlichen Stil bevorzugt. Ich würde mich mit Verkettung gehen. - Ich Ausgabepufferung nur verwenden, wenn Verkettung keine Option

Auch anstelle von beide ob_get_contents läuft () und ob_clean () einfach laufen ob_get_clean (), die beide auf einmal führt.

Wenn Sie sich Sorgen um den Overhead von String-Verkettung Sie beachten sollten, dass diese:

echo '

' $ test '
';..

ist messbar langsamer als diese:

echo '

', $ test '
';

Die erste kompiliert zwei String concats durch ein Echo folgte nach unten, während der zweite nur drei Echos unten kompiliert, die tatsächlich schneller ist.

Ich denke, die Ausgabe-Pufferung mit einem kleinen Leistungsvorteil hat, wenn Sie massive Saiten verwenden, aber zur gemeinsamen Nutzung sind Sie besser mit Verkettung meiner Meinung nach, wie dieser Code wahrscheinlich einfacher zu verstehen und zu debuggen von anderen.

Ein kleiner Punkt, aber wenn Sie die Ausgabe-Pufferung Ansatz verwenden wollen, können Sie auch kann es verwenden voll:

ob_start();

foreach($items as $item) {
    echo '<div>';
    echo $item;
    echo '</div>';
}

$test = ob_get_clean();

Wie oben erwähnt, Ausgabepufferung ist besser für die Leistung. Für große Strings ist der Unterschied in der Leistung überhaupt nicht vernachlässigbare. Sie können die Ausgabe-Pufferung in PHP zu String / Stringbuilder in Java vergleichen; für String-Verkettung, muss die gesamte Zeichenfolge jedes Mal in den Speicher kopiert werden. Für die Ausgabe-Pufferung, geht der Text in einen Puffer, der in vernünftigem incremements wächst, und es besteht keine Notwendigkeit, die Daten für jeden Ausgang zu kopieren.

Man könnte denken, auch über Inline HTML verwenden (noch schneller). Zusätzlicher Vorteil für die Inline-HTML ist, dass Ihre IDE wahrscheinlich Syntax-Hervorhebung auf der HTML ausführen können, was nicht passieren wird, wenn die HTML in einem PHP-String ist. Modifizierten Code (short_open_tags = On erforderlich):

ob_start();
?>

<? foreach($items as $item) { ?>
    <div><?= $item ?></div>
<? } ?>

<?
$test = ob_get_clean();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top