2009-06-27 9 views
2

Ein Googles Lassen sich das Internet schneller Gespräche enthielten anstelle der Verwendung von Druck oder String-Verkettung mit mehreren Argumenten in PHP über die Verwendung von echo etwas machen.mehr Argumente Echo, wenn output_buffering ist auf

echo 'The ball is ', $color; 

Anstatt entweder diese

echo "The ball is $color"; 
echo 'The ball is ' . $color; 

Was passiert, wenn die Ausgabe-Pufferung ist im Spiel?

Was wäre der Unterschied zwischen der Verwendung von Echo mit mehreren Argumenten zusammen mit der Pufferung der Ausgabe, vs die Verwendung der alternativen Methoden ohne Pufferung der Ausgabe?

Antwort

5

Lesen Sie unbedingt die PHP team's rebuttal von Google's performance tips.

Insbesondere er (Gwynne Raskind) sagt:

4) "Sie keine Verkettung mit echo"

Dies ist genau das Gegenteil der richtigen Ratschläge. Die Engine behandelt mehrere Argumente zu echo() in der Weise, dass Verkettung (oder Doppel-String-Interpolation) tatsächlich viel schneller ist. Siehe Benchmark, veröffentlicht unter http://pastie.org/523020.

+0

Und selbst wenn du den Haufen mehr Stress auferlegst, ist die Concat-Version viel schneller. Ich bevorzuge immer noch das Echo a, b, c Format (ohne guten Grund, aber Gewohnheit) – VolkerK

+0

+1 Gute Verbindung. . – cletus

1

Die erste Version sollte etwas schneller sein, da sie die Zeichenfolge für Variablenerweiterungen (einfache Anführungszeichen) nicht analysieren muss und keine Zeit benötigt, um die beiden Zeichenfolgen vor dem Schreiben zu verketten. Ich denke nicht, dass die Pufferung dies beeinflussen wird

+0

Aber wenn Ausgangspufferung eingeschaltet war, würde das nicht die erste Version dazu bringen, alles zu tun, was die späteren Versionen tun, um den Ausgangspuffer zu füllen? – joebert

+1

Nicht wirklich. Mit der "... $ x ..." - Version erweitert PHP zuerst die Zeichenfolgen (d. H. Erstellt eine neue Zeichenfolge) und übergibt sie dann an echo, unabhängig davon, ob ein Ausgabepuffer vorhanden ist oder nicht. Aber lesen Sie trotzdem die Antwort von Mercator. (Ersetze nie einen Leistungstest durch Annahmen ;-)) – VolkerK