2010-06-05 11 views
7

chiedevo se qualcuno sa se uno di questi metodi potrebbe produrre un output più veloce:PHP velocità - Molti Echos vs Costruire una stringa

Method 1 
for ($i=1;$i<99999;$i++) { 
echo $i, '<br>'; 
} 

o

Method 2 
for ($i=1;$i<99999;$i++) { 
$string .= $i . '<br>'; 
} 
echo $string; 

Grazie per ogni ingresso che avete.

+4

A chi importa? Se mai, ci sarà differenza di pochi microsecondi. Se ti interessa la velocità, usa qualcosa come Java. –

+3

Prova a eseguirlo? – Amber

+4

Direi che se ti interessa la velocità usa qualcosa come C;) –

risposta

3

Il metodo 1 sembra essere più veloce. Il Metodo 2 dovrà sputare un gruppo di CONCAT opcode per ogni iterazione del ciclo, e la stringa molto lunga sarà costruita in memoria fino a quando non sarai pronto per inviarlo. Il metodo 1 d'altra parte sarà solo due ECHO opcodes per loop, e quindi PHP/il tuo server web è libero di svuotare il contenuto sul client prima che tu abbia finito, se lo desidera.

Ovviamente, se si è preoccupati della micro-ottimizzazione, si otterranno prestazioni di gran lunga migliori utilizzando una cache opcode, un proxy di memorizzazione nella cache o qualcosa come hiphop.

+0

mentre di nuovo l'operazione di output è abbastanza complessa e dipende dal server SAPI jsut che riempie un buffer, quindi il secondo approccio potrebbe essere il modo più economico per creare un buffer ... forse ob_start() e buffering in questo modo è meglio ... ci sono molte variabili coinvolte e potrei trovare dei benchmark che dimostrino ogni approccio "migliore" :-p Ma è inutile ... usare un profiler, identificare il collo di bottiglia, migliorare lì. Nessuna micro-ottimizzazione. – johannes

0

Ho letto che il metodo più veloce è quello di abilitare output buffering e fare molti echi. Non ho benchmark per confermare questo reclamo, però.

In ogni caso, penso che questo sia nel regno della micro-ottimizzazione. La differenza è probabilmente misurabile, ma insignificante. Come i commenti di @Coronatus sopra, se la tua app fosse così sensibile alle prestazioni, non avresti usato PHP!

+1

"se la tua app fosse così sensibile alle prestazioni, non useresti PHP" Dillo a Facebook ;-) Ci sono sempre modi per migliorare PHP –

+1

@Italy Moav - Sì, lo fanno, ma PHP è usato solo per il frontend work su Facebook. Lingue ufficiali ci sono C++, Java e PHP. La chat (la più intensiva in termini di risorse) viene eseguita in C++. Un sacco di buoni articoli sulle prestazioni di highscalability.com –

0

Se si wan per micro-optimize, guardare al cambiamento $ i ++ a ++ $ i così

4

Metodo 1 utilizza meno memoria e CPU ed è (carico Meno server) "più veloce" Ma il collo di bottiglia di uscita molto probabilmente è la velocità di download dei browser.

Se non si esegue il buffer dell'output, il browser può iniziare a scaricare fogli di stile, immagini, ecc.
(mentre lo script è in attesa di alcuni risultati delle query)

Scopri i migliori risposte su PHP Optimalization o http://code.google.com/speed/articles/optimizing-php.html per ulteriori suggerimenti.

+0

Non sono sicuro che il metodo 1 sia più veloce poiché utilizza una virgola come operatore di concatenazione. –

+0

@Alix L'uso di più parametri per echo (la virgola) dovrebbe essere più veloce della prima concatenazione e quindi dell'eco. –

+0

Sì, ma il secondo esempio utilizza un operatore di concatenazione più veloce: il '.'. Da alcuni benchmark che ho visto usando ',' invece di '.' diminuisce" significativamente "la performance. –