Frage

Eine Frage, über verschiedene Methoden der html von PHP ausgibt; was sind die Leistungsunterschiede zwischen diesen:

Methode 1 - variable Verkettungs

$html = '';
$html .= '<ul>';
for ($k = 1; $k < = 1000; $k++){
    $html .= '<li> This is list item #'.$k.'</li>';
}
$html .= '</ul>';
echo $html;

Methode 2 - Ausgabepufferung

ob_start();
echo '<ul>';
for ($k = 1; $k < = 1000; $k++){
    echo '<li> This is list item #',$k,'</li>';
}
echo '</ul>';

Ich vermute, dass Sie einige Leistungseinbußen kommen aus ständig verändern und erweitern eine Variable; ist das richtig?

Cheers!

Danke GaryF, aber ich habe keine Antwort über Architektur wollen - diese Frage geht es um Leistung. Es scheinen einige unterschiedliche Meinungen / Tests zu sein, über die man schneller ist, weshalb es keine akzeptierte Antwort noch ist.

War es hilfreich?

Lösung

Es ist ein bisschen alt, aber dieser Beitrag von Sara Golemon wird wahrscheinlich helfen. AFAIK der Ausgabe sind Pufferung Funktionen sehr schnell und effizient und so ist echo, so dass, was würde ich verwenden.

Andere Tipps

Die Idee der String-Verkettung selbst beiseite, fordern Sie wirklich (glaube ich), wie sollten Sie Web-Seiten bauen, und es scheint mir, dass jede Form von expliziter concatentation ist wohl das Falsche zu tun.

Versuchen Sie, die Model-View-Control-Muster Nutzung Ihrer Daten für den Aufbau und es auf eine einfache Templating Bibliothek vorbei (wie Smarty ), und lassen sie es Sorgen darüber, wie Ihre Ansicht zu bauen .

Bessere Trennung, weniger Sorgen.

Ich benutze normalerweise Methode # 1, so kann ich das HTML setzen, wo jeder in einer Vorlagendatei, die statische HTML enthält. Ich versuche, so viel HMTL aus meinem PHP zu halten. Es sorgt für viele saubere und kürzere PHP, als die Vorlage in der Regel eine separate Datei ist.

In Bezug auf Geschwindigkeit / Leistung, ich bin den Unterschied denken wird sehr gering sein. Mit Ausgabepufferung, ist vergrößert es auch eine Variable die ganze Zeit, obwohl diese Variable nicht zugänglich ist, aber es muss irgendwo gelagert werden.

ich oft gefragt haben, ob offen und Schließen <?php langsamer als nur alles innerhalb <?php setzen und dann auf einmal echo'ing.

ich glaube, am Ende haben wir Millisekunden sprechen in äußerst komplexe Skripte.

Oh ja, Methode # 1 ist viel flexibler, wie Sie überall echo $html; können.

Es ist wahr, dass es ein leichter Kopf ist eine Variable in ständig modifiziert und Nachdrucke es. Allerdings nicht das bedeutet dabei, dass das Skript zu einem bestimmten Zeitpunkt beenden kann laufen (aufgrund einer Unterbrechung oder ähnliches), und die sequentiellen Echo-Anweisungen haben, werden teilweise die Seite, anstatt nichts gedruckt.

Ich werde eine lange Antwort tippen, wie PHP-Strings sind wandelbar (im Gegensatz zu unveränderlichen Strings wie in C oder C #), aber ich denke, ich werde verlinken auf nur ein älterer Beitrag habe ich über kam. Ich beschäftigt sich grundsätzlich mit dem, was Sie fragen, in Bezug auf die Java und C # Lösung, die ein Stringbuilder verwenden.

Nebenbei bemerkt: die String Lösung wäre ähnlich sein (nicht getestet):

$html = array();
$html[] = '<ul>';
for ($k = 1; $k < = 1000; $k++){
    $html[] = '<li> This is list item #';
    $html[] = $k;
    $html[] = '</li>';
}
$html[] = '</ul>';
echo implode('',$html);

Nur ein paar Gedanken:

  • Ausgabepufferung können Sie Seiten machen langsam aussehen, da der Benutzer nichts sieht, bis das gesamte Skript ausgeführt hat (obwohl die Art und Weise Sie # 1 Setup haben die gleiche würde true).

  • Strings in PHP sind muteable, so Verkettung ist nicht annähernd so schlecht wie in einigen anderen Sprachen. Aber sagen, dass die Ausgabe-Pufferung nur schneller ein klein wenig sein könnte, da der Raum für den Eingang zugeordnet ist ziemlich groß standardmäßig (40K gemäß diese )

Am Ende würde ich sagen, es ist wirklich mehr eine Frage des Stils. Wenn Sie mögen, was Ausgabepufferung kauft man, dann ist es wahrscheinlich der Weg zu gehen.

php:: output [] w /

Antworten auf Ihre Frage kann auch hier bestellt werden beitreten vs $ output. =

String-Verkettung ist der schnellste Weg, Strings zu bauen.

Ich habe nicht „echo“ vs String Gebäude getestet, aber solange man nicht gepufferte Ausgang echo sollte die schnellste aufgrund sequentiellen Schreiben auf einen selbst Spülung Puffer sein. (Nur Verlangsamung der bündig, was man nicht wirklich sogar vermeiden, wenn Sie String-Verkettung im Voraus tun)

Etwas, das ich nicht gesehen erwähnt habe, ist, dass in der Regel, der PHP-Typ mit Design Menschen zu arbeiten hat, die die HTML oder fügen Sie Stile auf eine andere Weise zu Klasse benötigen, so dass die Lösung, dass im Auge behalten muss.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top