Question

Une question sur les différentes méthodes de sortie du code HTML à partir de PHP; Quelles sont les différences de performances entre celles-ci:

Méthode 1 - Concaténation de variable

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

Méthode 2 - Mise en mémoire tampon de sortie

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

Je soupçonne que vous modifiez et élargissez continuellement une variable pour obtenir des résultats optimaux. est-ce correct?

Salut!

Merci GaryF, mais je ne veux pas de réponse à propos de l’architecture - cette question concerne les performances. Il semble y avoir des opinions / tests différents sur lesquels est le plus rapide, c'est pourquoi il n'y a pas encore de réponse acceptée.

Était-ce utile?

La solution

C'est un peu vieux, mais ce message de Sara Golemon aidera probablement. Autant que je sache, les fonctions de mise en mémoire tampon de sortie sont assez rapides et efficaces, de même que echo, c’est ce que j’aimerais utiliser.

Autres conseils

L'idée de la concaténation de chaînes elle-même est mise à part, vous demandez vraiment (je pense) comment vous devriez construire des pages Web, et il me semble que toute forme de concaténation explicite est probablement la mauvaise chose à faire.

Essayez d'utiliser le modèle (modèle-vue-contrôle) pour créer vos données. , et en le passant à une simple bibliothèque de modèles (comme Smarty ), et laissez-le s'inquiéter de la création de votre vue. .

Meilleure séparation, moins de problèmes.

J'utilise généralement la méthode n ° 1 pour pouvoir insérer ce code HTML n'importe où dans un fichier de modèle contenant du code HTML statique. J'essaie de garder autant de HTML que de PHP. Cela rend PHP beaucoup plus propre et plus court, car le modèle est généralement un fichier séparé.

En ce qui concerne la vitesse / performance, je pense que la différence sera très mineure. Avec la mise en tampon de sortie, la variable est toujours agrandie, même si cette variable n’est pas accessible, mais elle doit être stockée quelque part.

Je me suis souvent demandé si ouvrir et fermer <?php était plus lent que de simplement mettre tout cela à l'intérieur echo $html; puis de faire écho à la fois.

Je pense qu'en fin de compte, nous parlons de millisecondes dans des scripts extrêmement complexes.

Ah oui, la méthode n ° 1 est beaucoup plus flexible que vous pouvez <=> n'importe où.

Il est vrai que la modification et la réimpression constantes d’une variable entraînent une légère surcharge. Cependant, pas cela signifie qu'à un moment donné, le script peut finir de s'exécuter (à cause d'une interruption ou similaire), et les instructions d'écho séquentielles auront partiellement imprimé la page plutôt que rien.

J'allais écrire une longue réponse sur la façon dont les chaînes PHP sont modifiables (par opposition aux chaînes immuables comme en C ou C #), mais je pense que je vais simplement créer un lien vers message plus ancien que je suis tombé sur . Je traite essentiellement de ce que vous demandez, en ce qui concerne les solutions Java et C # consistant à utiliser un constructeur de chaînes.

sidenote: la solution pour constructeur de chaînes ressemblerait à (non testée):

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

Juste quelques réflexions:

  • La mise en mémoire tampon de sortie peut vous ralentir, car l'utilisateur ne voit rien tant que le script n'a pas été exécuté (bien que la configuration n ° 1 soit identique à celle que vous avez définie).

  • Les chaînes en php sont modifiables, donc la concaténation n’est pas aussi mauvaise que dans certaines autres langues. Cela étant dit, la mise en mémoire tampon de sortie pourrait être un peu plus rapide, car l'espace alloué pour l'entrée est assez grand par défaut (40 Ko selon ceci )

Au final, je dirais que c’est vraiment plus une question de style. Si vous aimez ce que la mise en mémoire tampon vous achète, alors c'est probablement la voie à suivre.

Les réponses à votre question se trouvent également ici: php: output [] w / rejoindre vs $ output. =

La concaténation de chaînes est le moyen le plus rapide de créer des chaînes.

Je n'ai pas testé " echo " vs chaîne de construction, mais tant que vous n'utilisez pas de sortie en tampon, l'écho devrait être le plus rapide en raison d'écritures séquentielles dans un tampon à vidage automatique. (seul le ralentissement se produit, ce que vous n'éviterez pas vraiment même si vous effectuez une concaténation de chaînes à l'avance)

Ce que je n'ai pas vu, c'est que, généralement, le responsable de PHP doit travailler avec des concepteurs qui doivent classer le code HTML ou ajouter des styles d'une autre manière. La solution doit donc en tenir compte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top