Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1867 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Optimisation code php

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Optimisation code php

n°2160992
networkinf​o
Posté le 22-10-2012 à 18:35:20  profilanswer
 

Bonjour
 
J'ai pris l'habitude coder comme cela pour séparer le php du html

Code :
  1. $i=0;
  2. $data = array();
  3. $result = null;
  4. $query = 'SELECT * FROM tb_promos' ;
  5. $result = mysql_query($query) or die($query . " - " . mysql_error());
  6. while($data = mysql_fetch_object($result)){
  7.   $id_promo[$i]  = $data->id_promo;
  8.   $page[$i] = $data->page;
  9.   $id_produit_gauche[$i] = $data->id_produit_gauche;
  10.   $contenu_promo_gauche[$i] = $data->contenu_promo_gauche;
  11.   $id_produit_droite[$i] = $data->id_produit_droite;
  12.   $contenu_promo_droite[$i] = $data->contenu_promo_droite;
  13.   $actif[$i] = $data->actif;
  14. $i++;
  15. }


 

Code :
  1. <?php for($i=0;$i<count($id_promo);$i++){ ?>
  2.         <tr>
  3.           <td><a href="modif_promo.php?id_promo=<?php echo $id_promo[$i]; ?>"><img border="0" src="images/edit_icon.png" width="16" height="16" ></a></td>
  4.           <td><?php echo $id_promo[$i]; ?></td>
  5.           <td><?php echo $page[$i]; ?></td>
  6.    <td><?php echo $id_produit_gauche[$i]; ?></td>
  7.    <td><?php echo $contenu_promo_gauche[$i]; ?></td>
  8.    <td><?php echo $id_produit_gauche[$i]; ?></td>
  9.    <td><?php echo $contenu_promo_droite[$i]; ?></td>
  10.    <td><?php if ( $actif[$i] == '1' ) { echo 'oui'; } else { echo 'non';} ?></td>
  11.   </tr>
  12.         <?php } ?>


 
Ca me convient mais j'ai l'impression que c'est pas très optimisé surtout au niveau de la mémoire
quand la table contient beaucoup d'entrées
 
Avez un conseil à me donner hormis le fait de virer le * de ma requête ?
 
Merci d'avance


Message édité par networkinfo le 22-10-2012 à 18:36:15
mood
Publicité
Posté le 22-10-2012 à 18:35:20  profilanswer
 

n°2161009
CyberDenix
Posté le 22-10-2012 à 20:54:30  profilanswer
 

Je vois au moins trois points négatifs dans cette façon de coder :
 
1] Le count doit être en dehors de la boucle :
 
$max = count(...);
for ($i = 0; $i < $max; ++$i) {
...
}
 
2] N'oublies pas de faire un mysql_free_result($result) ou un truc du genre, sinon c'est comme si tu avais 2 fois ton tableau en mémoire ($result et $actif). Je t'invite par ailleurs à utiliser PDO, qui te permetra d'avoir des requêtes paramétrées et donc plus rapides en seconde exécution.
 
3] Faire N <?php instancie N fois le parseur PHP. Il vaut mieux faire un seul <?php, ecrire et concaténer ton html dans une chaine, et faire un echo à la fin.


Message édité par CyberDenix le 22-10-2012 à 20:55:29

---------------
Directeur Technique (CTO)
n°2161011
xaeon
Profil: TT
Posté le 22-10-2012 à 20:57:32  profilanswer
 

Avis personnel: je ne vois pas vraiment ce qui pourrait "optimiser" dans le sens revoir l'algorithme derrière, c'est une simple requète avec construction d'une table HTML. Par contre, il me semble que depuis un moment mysql_connect est déprécié, on utilise PDO ou mysqli.

 

Edit ::

 

Effectivement vu de la facon de Cyberdenix, le count en amont du for permet de ne pas avoir à réévaluer à chaque passage de boucle. Par contre pour le point n°3 je découvre, mais j'aimerai bien avoir plus d'infos sur l'impact en perfs car j'ai toujours fait ainsi dans mes vues :'(


Message édité par xaeon le 22-10-2012 à 20:59:48
n°2161012
networkinf​o
Posté le 22-10-2012 à 21:00:08  profilanswer
 

Merci beaucoup pour vos conseils !
 
Comme je charge tout dans un tableau, je sature la mémoire
Pourtant le moteur de template smarty fait bien comme ça non?
 
Je vais faire des tests avec vos conseils


Message édité par networkinfo le 22-10-2012 à 21:00:39
n°2161025
CyberDenix
Posté le 22-10-2012 à 23:53:03  profilanswer
 

On me demande d'optimiser... j'optimise !
 
Après c'est un deal entre la performance pure (mesurable), et la lisibilité personnelle que l'on attribue au code (pas mesurable). On penche dans un sens ou dans l'autre.
 
Par exemple, j'adore faire des foreach.
Si je m'écoutais, je les transformerais tous en while :B
 


---------------
Directeur Technique (CTO)
n°2161026
xaeon
Profil: TT
Posté le 23-10-2012 à 00:00:00  profilanswer
 

:) Ok merci pour le petit éclaircissement

n°2161068
yellu
Posté le 23-10-2012 à 11:20:39  profilanswer
 

Bonjour,
 
Une optimisation pourrait être le fait que finalement tu parses deux fois tes données et les stocks dans un tableau...  
Ce qui effectivement mange ta memory PHP.
 
Si tu avais un objet qui implémente la SPL (Iterator et Countable) et qui utilise les api mysql pour fetcher le resultat de mysql sur la methode "next()" de Iterator et qui renverrai un "num_rows" sur la methode "count()" alors tu n'aurais plus a utiliser la memory PHP ni a fetcher deux fois ton jeu de resultat.
Tu enverrai juste cet objet à ta vue et basta. Encore mieux : la methode "current()" renverrai un objet disposant lui même de méthode propre à un model donné.
 
A mon sens c'est là qu'il y a optimisation car ton appli fonctionnera quelque soit le nombre de ligne de ta table alors qu'actuellement ton memory limit arrivera un jour au max si les lignes de la requetes deviennent plus nombreuses ...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Optimisation code php

 

Sujets relatifs
[VBA] Optimisation de codeoptimisation SSE pour du code C (auto ou inline) [résolu]
optimisation du code c++Optimisation de code javascript
Code simple, optimisation possible?Optimisation d'un code VBA pour excel
Optimisation de codeOptimisation de la syntaxe d'un code (pour gain en rapidité)
optimisation du code, tester valeur avant attribution ?[Turbo Pascal 7] Optimisation trunc() et écriture dans le code
Plus de sujets relatifs à : Optimisation code php


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR