[php] Optimisation vitesse de création page

Optimisation vitesse de création page [php] - Programmation

Marsh Posté le 03-10-2001 à 23:43:39    

Salut,
 
Voilà, je me pose des questions sur l'optimisation de la vitesse de crétion d'une page php.
 
Par exemple, les include() ralentissent-t'ils fortement la vitesse de création? (dans le cas où on met un include pour le header et un autre pour le footer)
 
Ensuite, vaut-t'il mieux générer un gros $bloc avec tout le contenu de la page et ensuite l'afficher, ou bien est-il plus efficace de faire régulièrement des echo() alternés avec du HTML normal?
 
Avez vous des trucs pour accélérer vos scripts?
 
Merci d'avance de vos réponses.

Reply

Marsh Posté le 03-10-2001 à 23:43:39   

Reply

Marsh Posté le 03-10-2001 à 23:54:17    

très bonnes questions
Je suis aussi interessé par la réponse..

Reply

Marsh Posté le 04-10-2001 à 00:20:28    

si tu veux vraiment optimiser, il s'agit plus de programmer intelligemment, d'utiliser les fonctions plus rapides de ne pas répeter d'opérations inutiles etc..
 
faire des include ne ralentit pas une page (pas beaucoup mais c'est quasi imperceptible) maitnenant c clair que plus y a d'instructions à traiter, plus la page mettra de temps à charger mais ça reste vraiment impossible à voire
 
perso je fais des include de dizaines de fichiers sur mon site et tout passe rapide.
 
pour ce qui est du code HTML, si il ne contient pas de variable pourquoi faire un echo ? ferme simplement le tag php. ensuite ça tient à ta façon de coder, la meilleur façon de faire est celle qui te convient le mieux.


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 04-10-2001 à 01:34:44    

Sh@rdar a écrit a écrit :

 
pour ce qui est du code HTML, si il ne contient pas de variable pourquoi faire un echo ? ferme simplement le tag php. ensuite ça tient à ta façon de coder, la meilleur façon de faire est celle qui te convient le mieux.  




 
Imaginons, j'ai une page comme ça:
 

Code :
  1. <HTML>
  2. <HEAD></HEAD>
  3. <BODY>
  4. <?
  5. faituntruc();
  6. echo $le_résultat;
  7. ?>
  8. <P>blabla</P>
  9. <?
  10. faitunautretruc();
  11. echo $le_résultat;
  12. ?>
  13. <P>blublu</P>
  14. <?
  15. faitunderniertruc();
  16. echo $le_résultat;
  17. ?>
  18. </BODY>
  19. </HTML>


 
Ne serait-il pas plus rapide de faire ceci?
 

Code :
  1. <?
  2. $bloc = "
  3. <HTML>
  4. <HEAD></HEAD>
  5. <BODY>";
  6. faituntruc();
  7. $bloc = $bloc."$le_résultat
  8. <P>blabla</P>";
  9. faitunautretruc();
  10. $bloc = $bloc."$le_résultat
  11. <P>blublu</P>";
  12. faitunderniertruc();
  13. $bloc = $bloc."$le_résultat
  14. </BODY>
  15. </HTML>";
  16. echo $bloc;
  17. ?>

Reply

Marsh Posté le 04-10-2001 à 09:17:25    

à mon avis si tu commences par ça, avec un gros code tu vas jamais t'en sortir
 
relis bien ton code et tu verra que c'est absolument pas logique de rajouter un traitement de données lorsqu'il n'y en a pas besoin...


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 04-10-2001 à 10:14:11    

les trucs a optimiser c plutot connexion/deconnexion a une base de données, ouverture/fermeture de fichiers,etc

Reply

Marsh Posté le 04-10-2001 à 10:49:31    

Déjà, (c'est pas pour la vitesse mais pour la propreter), a la fin de tes fonction, fait un  
return $le_résultat;
au lieu d'avoir une variable globale de nom $le_résultat. CVa te permettra d'avoir des fonctions plus souple à utilisé et un code  
plus compact.
 
Pour la vitesse :
1) Ensuite, l'utilisation des include ne ralentis presque pas le code.
 
2) l'accés à de nombreux fichier (donc beaucoup d'ouverture&fermeture de fichier) et les accés à une base de donnée risquent de ralentir le code.
 
3) les boucles inutiles ralentissent également le traimtement.
 
4) les fonctions récursivent sont souvent plus lentes que des boucles (en gros éviter le plus possible les fonctions récursivent)

Reply

Marsh Posté le 04-10-2001 à 10:52:44    

Le truc qui limite le plus c'est la bande passante du serveur en général, le cpu n'est pas un problème généralement.
 
Le 2è truc qui peut ralentir beaucoupe c'est des requetes SQL trop nombreuses ou mal optimisées.
 
Pour accélérer un script, tu peux par exemple faire du cache, pour ne pas avoir à récupérer les memes infos à chaque affichage.
 
Personnellement, lorsque je développe, je privilégie surtout la maintenabilité et la clarté du code, la vitesse c'est très secondaire.

Reply

Marsh Posté le 04-10-2001 à 12:26:42    

je suis d'accord avec krolours1 ,les requetes sont parmis les éléments qui peuvent faire trainer l'affichage et voir renrdre l'affichafge impossible (timeout).
 
de plus certain  script aussi alourdisse le site , donc faire bien attention a tt ca et si tu récupère descripts faut bien etre sur qu'il soit bien optimisé etc....

Reply

Marsh Posté le 04-10-2001 à 13:53:21    

omega2 a écrit a écrit :

Déjà, (c'est pas pour la vitesse mais pour la propreter), a la fin de tes fonction, fait un  
return $le_résultat;
au lieu d'avoir une variable globale de nom $le_résultat. CVa te permettra d'avoir des fonctions plus souple à utilisé et un code  
plus compact.




 
Oulah, c'était un exemple de code bidon hein, pas un exemple de de syntaxe modèle! ;)

Reply

Marsh Posté le 04-10-2001 à 13:53:21   

Reply

Marsh Posté le 04-10-2001 à 14:11:28    

Pour résumer, corrigez-moi si je me trompes:
 
- Il ne sert à rien d'envoyer la page en une seule fois (une variable, un echo), autant ne faire ne php que les parties dynamiques de la page avec des echos à chaque fois.
 
- Il n'y a aucune raison au niveau perfs de ne pas travailler avec des includes pour les parties identiques de différentes pages.
 
- Il faut surtout optimiser la connexion/deconnexion à une base de données et l'ouverture/fermeture de fichiers : pourrais-tu développer cela, __Lolo__ ? (exemples)
 
- Des accès à de nombreux fichier (donc beaucoup d'ouverture & fermeture de fichier) de ralentir le code. (omega2, par ouverture et fermeture de fichiers je suppose que tu entends uniquement des fopen() et fclose()?)
 
- De nombreux accès à une base de donnée risquent de ralentir le code, essayer donc de faire des requêtes groupées?
 
- Les boucles inutiles ralentissent également le traimtement. omega2, peut-tu me donner un exemple de boucle "inutile"?
 
- Pour accélérer un script, tu peux par exemple faire du cache, pour ne pas avoir à récupérer les memes infos à chaque affichage. -> krolours1 : sous quelle forme proposes-tu de faire ce cache? exemple?
 
- Les fonctions récursives sont souvent plus lentes que des boucles -> Bon ça c'est logique, si une fonction intégrée fait ce qu'on veut, l'utiliser en priorité (genre 'for()' plutôt qu'une fonction récursive qui fait la même chose).
 
Merci pour vos réponses

Reply

Marsh Posté le 04-10-2001 à 14:25:29    

Freekill a écrit a écrit :

 
- Pour accélérer un script, tu peux par exemple faire du cache, pour ne pas avoir à récupérer les memes infos à chaque affichage. -> krolours1 : sous quelle forme proposes-tu de faire ce cache? exemple?
 




 
Pour le cache, il s'agit par exemple de stocker en mémoire les résultats d'une grosse requete dont les résultats ne changent pas souvent ou meme stocker carrément des pages prégénérées.
2 solutions :  
- Stocker ça dans des fichiers
- Stocker ça dans de la mémoire partagée (voir shm_get_var)
 
Ce genre de techniques ça sert sur les gros gros sites,
je suis pas sur que tu ait besoin de ça.
 
Par contre au lieu de faire des echo(), je te conseille d'étudier les libraires de templates qui existent : ça permet de séparer completement le php et le html -> c'est + propre et + clair, ça permet à qqn d'autre (qqn qui connait pas le php par exemple) de changer le look du site.

Reply

Marsh Posté le 04-10-2001 à 14:38:47    

Oui, c'est sûr que les shm_* ça m'a l'air un peu 'overkill' pour mon petit site.
 
Par contre, je réfléchissais justement à créer un cache pour mon script le plus gourmand.
 
Il s'agit d'une sorte de guestbook 'amélioré' avec plein de fonctions en plus.
 
Comme le rythme d'ajout de messages est assez faible je pensais enregistrer la première page (celle qui est le plus affichée) en fixe à chaque nouveau message, tout en laissant les pages suivantes en dynamique.
 
Penses-tu que ce soit intéressant?
 
Sinon, as-tu des liens pour les templates dont tu parles?
 
Je ne vois pas trop ce que c'est...

 

[edtdd]--Message édité par Freekill--[/edtdd]

Reply

Marsh Posté le 04-10-2001 à 14:42:35    

qu'appelle tu par template ?  
comme le php c'est du C , es le preincipe des template en C que tu parles?
aurait tu un exemple de leurs utilisations?
 
est -il possible de faire des templates avec l'asp (vb, ou javascript)?
 
@++

 

[edtdd]--Message édité par saxgard--[/edtdd]

Reply

Marsh Posté le 04-10-2001 à 15:22:05    

Freekill a écrit a écrit :

Pour résumer, corrigez-moi si je me trompes:
 
- Il ne sert à rien d'envoyer la page en une seule fois (une variable, un echo), autant ne faire ne php que les parties dynamiques de la page avec des echos à chaque fois.




Ca dépends, il est vrai que d'envoyer en plusieurs fois permet parfois de faire patienter un peu plus le navigateur. (comme il reçoit une partie de la page il reprends son compteur d'attente à zéro.)
 

Freekill a écrit a écrit :

 
- Il n'y a aucune raison au niveau perfs de ne pas travailler avec des includes pour les parties identiques de différentes pages.




Ca, je suis d'accord.
 

Freekill a écrit a écrit :

 
- Il faut surtout optimiser la connexion/deconnexion à une base de données et l'ouverture/fermeture de fichiers : pourrais-tu développer cela, __Lolo__ ? (exemples)




Rien à ajouter de mon côté si ce n'est que l'ouverture/fermeture d'un fichier fait travailler le disque et/ou le cache de l'OS. Pour l'ouverture/fermeture  d'un accés à une base de donnée, ca oblige la base de donée en question à vérifier les droits d'accés de l'utilisateur et ce qui peut entrainer un accés au HDD. De plus, une ouverture de base de données dépense un peu de CPU et un peu de bande passante (je pense que ces dépences sont assez négligable pour la pluspart des sites)
 

Freekill a écrit a écrit :

 
- Des accès à de nombreux fichier (donc beaucoup d'ouverture & fermeture de fichier) de ralentir le code. (omega2, par ouverture et fermeture de fichiers je suppose que tu entends uniquement des fopen() et fclose()?)



C'était de ça que je parlais
 

Freekill a écrit a écrit :

 
- De nombreux accès à une base de donnée risquent de ralentir le code, essayer donc de faire des requêtes groupées?




Oui et surtout ne ramener si possible que les champs qui seront potentiellement utilisé dans le traitement qui suivra la requête.
Atention aussi à la perte de temps que peuvent entrainer les jointures dans certains cas. (y a t'il un pro des BDD dans la salle?)
 

Freekill a écrit a écrit :

 
- Les boucles inutiles ralentissent également le traimtement. omega2, peut-tu me donner un exemple de boucle "inutile"?




Les boucles en while servant à vérifier l'existance de certains cas. Si on fait passer un booléen de vrai à faux (ou l'inverse) quand on tombe sur un des cas dont on veux vérifier l'existance sans mettre ce booleen là dans la condition du while alors les passages suivant le changement d'êtat du bolleen correspondent à ce qu'on peu appeler une boucle inuutile.
 

Freekill a écrit a écrit :

 
- Pour accélérer un script, tu peux par exemple faire du cache, pour ne pas avoir à récupérer les memes infos à chaque affichage. -> krolours1 : sous quelle forme proposes-tu de faire ce cache? exemple?



Je lui laisse le soin de te répondre.
 

Freekill a écrit a écrit :

 
- Les fonctions récursives sont souvent plus lentes que des boucles -> Bon ça c'est logique, si une fonction intégrée fait ce qu'on veut, l'utiliser en priorité (genre 'for()' plutôt qu'une fonction récursive qui fait la même chose).




 

Freekill a écrit a écrit :

 
Merci pour vos réponses  




De rien.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed