Domanda

Una domanda sui diversi metodi di emissione di HTML da PHP; quali sono le differenze di prestazione tra questi:

Metodo 1 - concatenazione di variabili

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

Metodo 2 - buffering dell'output

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

Sospetto che tu abbia un po 'di successo dalle prestazioni modificando e allargando continuamente una variabile; è corretto?

Cheers!

Grazie GaryF, ma non voglio una risposta sull'architettura: questa domanda riguarda le prestazioni. Sembra che ci siano diverse opinioni / prove su quale sia più veloce, motivo per cui non esiste ancora una risposta accettata.

È stato utile?

Soluzione

È un po 'vecchio, ma questo post di Sara Golemon probabilmente aiuterà. AFAIK le funzioni di buffering dell'output sono abbastanza veloci ed efficienti, così come lo è echo, quindi è quello che vorrei usare.

Altri suggerimenti

L'idea della concatenazione di stringhe a parte, mi stai davvero chiedendo (penso) come dovresti creare pagine web, e mi sembra che ogni forma di concatenazione esplicita sia probabilmente la cosa sbagliata da fare.

Prova a utilizzare il Modello di controllo vista modello per creare i tuoi dati e passandolo a una semplice libreria di modelli (come Smarty ), e preoccupati di come costruire la tua vista .

Migliore separazione, meno preoccupazioni.

Di solito utilizzo il metodo n. 1, quindi posso inserire quell'HTML ovunque in un file modello che contiene HTML statico. Cerco di tenere fuori HMTL dal mio PHP. Rende PHP molto più pulito e più breve, poiché il modello è di solito un file separato.

Per quanto riguarda la velocità / prestazioni, sto pensando che la differenza sarà molto minore. Con il buffering dell'output, inoltre, ingrandisce continuamente una variabile, sebbene tale variabile non sia accessibile, ma deve essere memorizzata da qualche parte.

Mi sono spesso chiesto se aprire e chiudere <?php sia più lento del mettere tutto dentro echo $html; e riecheggiare tutto in una volta.

Penso che alla fine stiamo parlando di millisecondi in script estremamente complessi.

Oh sì, il metodo n. 1 è molto più flessibile come puoi <=> ovunque.

È vero che c'è un leggero sovraccarico nel modificare costantemente una variabile e ristamparla. Tuttavia, non significa che a un certo punto la sceneggiatura potrebbe terminare (a causa di un'interruzione o simile), e le dichiarazioni di eco sequenziali avranno parzialmente stampato la pagina anziché niente.

Stavo per scrivere una lunga risposta su come le stringhe PHP sono mutabili (al contrario delle stringhe immutabili come in C o C #), ma penso che mi limiterò a collegarmi a un post precedente mi sono imbattuto . Fondamentalmente mi occupo di quello che mi stai chiedendo, rispetto alla soluzione Java e C # dell'utilizzo di un stringbuilder.

sidenote: la soluzione stringbuilder sarebbe simile a (non testato):

$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);

Solo un paio di pensieri:

  • Il buffering dell'output può far sembrare le tue pagine lente, dal momento che l'utente non vede nulla fino a quando non viene eseguito l'intero script (anche se il modo in cui hai impostato lo stesso numero 1 sarebbe valido).

  • Le stringhe in php sono mutabili, quindi la concatenazione non è così grave come in altre lingue. Detto questo, il buffering dell'output potrebbe essere leggermente più veloce, poiché lo spazio allocato per l'input è abbastanza grande di default (40K secondo questo )

Alla fine direi che è davvero una questione di stile. Se ti piace il buffering dell'output, allora è probabilmente la strada da percorrere.

Le risposte alla tua domanda sono disponibili anche qui: php: output [] w / join vs $ output. =

La concatenazione di stringhe è il modo più veloce per creare stringhe.

Non ho testato " echo " vs string building, ma fintanto che non si utilizza l'eco di output bufferizzato dovrebbe essere il più veloce a causa di scritture sequenziali su un buffer con scaricamento automatico. (solo il rallentamento è nel flush, che non eviterai davvero anche se esegui la concatenazione di stringhe in anticipo)

Qualcosa che non ho visto menzionato è che, di solito, il ragazzo di PHP deve lavorare con persone di design che devono classificare l'HTML o aggiungere stili in altro modo, quindi la soluzione deve tenerlo presente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top