92 votes

Balises ouvrante/fermante & performance ?

Cela peut être une question stupide, mais comme quelqu'un de relativement nouveau pour le PHP, je me demande si il y a des problèmes liés aux performances fréquemment d'ouverture et de fermeture des balises PHP dans le HTML code du modèle, et si oui, quelles pourraient être les meilleures pratiques en termes de travail avec des balises PHP?

Ma question n'est pas à propos de l'importance ou de l'exactitude de balises de fermeture, ou sur le type de code est plus lisible que l'autre, mais plutôt sur la façon dont le document analysé/exécution et l'impact qu'elle pourrait avoir sur les performances.

Pour illustrer, considérons les deux extrêmes:

Mélange de PHP et de balises HTML:

<?php echo
   '<tr>
       <td>'.$variable1.'</td>
       <td>'.$variable2.'</td>
       <td>'.$variable3.'</td>
       <td>'.$variable4.'</td>
       <td>'.$variable5.'</td>
   </tr>'
?>
// PHP tag opened once

La séparation de PHP et de balises HTML:

<tr>
   <td><?php echo $variable1 ?></td>
   <td><?php echo $variable2 ?></td>
   <td><?php echo $variable3 ?></td>
   <td><?php echo $variable4 ?></td>
   <td><?php echo $variable5 ?></td>
</tr>
// PHP tag opened five times

Aimerait entendre certains points de vue sur ce point, même si c'est juste pour entendre, qu'il ne fait aucune différence.

Merci.

90voto

3 règles simples pour vous d'obtenir ce droit:

  • Aucune syntaxe problème peut affecter les performances. La manipulation des données.
  • Parler de la performance uniquement soutenu avec les résultats de profilage.
  • L'optimisation prématurée est la racine de tous les maux

Les problèmes de performances sont assez difficiles à comprendre. Il est conseillé pour les débutants de ne pas le prendre en compte. Parce qu'ils sont toujours impressionné avec peu de choses et ne parviennent pas à voir un réel choses importantes. Tout simplement parce que le manque d'expérience.

De même pour votre question. Imaginez que vous obtiendrez jamais une certaine différence. Même le plus gros, disons, une méthode est 2 fois plus rapide. Oh mon dieu, 2 fois! Je l'ai choisi et optimisé mon appli bien, il sera exécuté à 50% plus rapide maintenant!

Mal. Pas 50%. Vous n'auriez jamais d'avis ou même de mesurer cette augmentation de la vitesse. Parce que vous avez optimisé une partie qui prennent seulement 0,01% de l'ensemble de l'exécution du script.

Comme pour la grande tables HTML, il beaucoup de temps pour le navigateur afin de le rendre. Beaucoup plus que vous avez pris à générer.

Le profilage est un mot-clé dans le monde de la performance. On peut corbeille de performance liés à la question sans doutes si il n'y a pas de mot "profilage". Dans le même temps, le profilage n'est pas la science de fusée. J'ai juste mesure de l'exécution de différentes parties de votre script. Peut être fait avec certains profils, comme xdebug, ou même manuellement, à l'aide de microtime(1).

Apprendre à profil avant de poser des questions de performances. Et apprendre à ne pas poser des questions de performances si il n'y a pas de vraies raisons pour cela. L'optimisation prématurée est la racine de tous les maux.

43voto

Amien Points 351

J'ai refait les tests avec 50 000 lignes et ajouté le multi écho dans 1 méthode de la balise trop

for ($j=0;$j<30;$j++) {
    foreach ($results as $key=>$val){
    ?>
       <tr>
           <td><?php echo $results[$key][0]?></td>
           <td><?php echo $results[$key][1]?></td>
           <td><?php echo $results[$key][2]?></td>
           <td><?php echo $results[$key][3]?></td>
           <td><?php echo $results[$key][4]?></td>
           <td><?php echo $results[$key][5]?></td>
           <td><?php echo $results[$key][6]?></td>
           <td><?php echo $results[$key][7]?></td>
           <td><?php echo $results[$key][8]?></td>
           <td><?php echo $results[$key][9]?></td>
           <td><?php echo $results[$key][10]?></td>
           <td><?php echo $results[$key][11]?></td>
           <td><?php echo $results[$key][12]?></td>
           <td><?php echo $results[$key][13]?></td>
           <td><?php echo $results[$key][14]?></td>              
       </tr>
    <?php 
    }
}

durée1: 31.15542483 Secondes

for ($k=0;$k<30;$k++) {
    foreach ($results as $key1=>$val1){
        echo
           '<tr>
               <td>'.$results[$key1][0].'</td>
               <td>'.$results[$key1][1].'</td>
               <td>'.$results[$key1][2].'</td>
               <td>'.$results[$key1][3].'</td>
               <td>'.$results[$key1][4].'</td>
               <td>'.$results[$key1][5].'</td>
               <td>'.$results[$key1][6].'</td>
               <td>'.$results[$key1][7].'</td>
               <td>'.$results[$key1][8].'</td>
               <td>'.$results[$key1][9].'</td>
               <td>'.$results[$key1][10].'</td>
               <td>'.$results[$key1][11].'</td>
               <td>'.$results[$key1][12].'</td>
               <td>'.$results[$key1][13].'</td>
               <td>'.$results[$key1][14].'</td>              
           </tr>';
    }
}

duration2: 30.23169804 Secondes

for ($l=0;$l<30;$l++) {
    foreach ($results as $key2=>$val2){     
           echo'<tr>';
               echo'<td>'.$results[$key2][0].'</td>';
               echo'<td>'.$results[$key2][1].'</td>';
               echo'<td>'.$results[$key2][2].'</td>';
               echo'<td>'.$results[$key2][3].'</td>';
               echo'<td>'.$results[$key2][4].'</td>';
               echo'<td>'.$results[$key2][5].'</td>';
               echo'<td>'.$results[$key2][6].'</td>';
               echo'<td>'.$results[$key2][7].'</td>';
               echo'<td>'.$results[$key2][8].'</td>';
               echo'<td>'.$results[$key2][9].'</td>';
               echo'<td>'.$results[$key2][10].'</td>';
               echo'<td>'.$results[$key2][11].'</td>';
               echo'<td>'.$results[$key2][12].'</td>';
               echo'<td>'.$results[$key2][13].'</td>';
               echo'<td>'.$results[$key2][14].'</td>';              
           echo'</tr>';
    }
}

duration3: 27.54640007 Secondes

Pas beaucoup de différence entre les 2 méthodes, mais on dirait qu'il est un peu plus rapide avec moins de concaténation @poke

Depuis que je doute que je vais avoir besoin de cette quantité de données de 1 go, je crois que je vais continuer à utiliser le nombre de balises, le code de l'indentation semble plus lisible et "afficher la source" mise en page plus précise

12voto

celalo Points 1392

Vous pouvez facilement ignorer la différence de performance entre ces deux-là. Aujourd'hui avec l'informatique moderne des ressources, la différence n'a pas vraiment d'importance. Ce genre d'écho sur les questions connexes sont vraiment pas à s'inquiéter. Il y a des tonnes d'autres choses que vous devriez considérer avant que. En dehors de cela, il y a toujours un débat entre les meilleures performances et la lisibilité et la maintenabilité du code. Vous ne pouvez pas toujours essayer d'obtenir la meilleure performance. Au lieu de cela, vous devez tenir compte des performances des préoccupations à la fois avec la quantité de temps que vous devez consacrer à cela.

5voto

Xamfap Points 49

Le Code est facile à traduire d'un pseudo-code, c'est mieux. Ceci est démontré par les exemples ci-dessus. Qui prend plus de temps pour le dire?

"Start php, do this 30 times:, then stop php.  Print this.  Start php, print this, stop php. Print this.  Start php, print this, stop php.Print this.  Start php, print this, stop php. Print this.  Start php, print this, stop php.Print this.  Start php, print this, stop php. Print this.  Start php, print this, stop php.Print this.  Start php, print this, stop php..."

"Start php, do this 30 times: print this, then add this to that, then add this to that, then add this to that, then add this to that, then add this to that, then add this to that..."

"Start php, do this 30 times: print this, print this, print this, print this, print this, print this, print this..."

Personnellement, je ferais:

"Start php, define this, do this 30 times: add this to that.  Print." 

Une explication technique sur la façon dont l'interprète travaille et pourquoi une méthode est plus rapide que l'autre n'est pas pertinent pour un débutant. Il est préférable de connaître les règles de base:

  1. Le plus simple est mieux.
  2. Si elle ne rentre pas sur une seule page, alors qu'il est en fait trop (décomposer).
  3. Si vous ne pouvez pas la main-d'écrire le pseudo-code sur une carte d'index, il est trop complexe.

L'utilisation des balises supplémentaires si le résultat global est plus simple. Période.

5voto

Martien de Jong Points 47

Le vrai problème avec ceci est utilisation mémoire. Chaîne concaténation et masse écho-ing peut augmenter de façon exponentielle l’utilisation mémoire.

Si vous spam la balise php votre code devient illisible.

Meilleure solution consiste à utiliser un moteur de template et éviter de mélanger le code et la présentation au total.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X