IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de donn�es Discussion :

Optimisation de scripts PHP/MySQL [D�bat]


Sujet :

PHP & Base de donn�es

  1. #121
    Membre chevronn�
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Par d�faut
    Citation Envoy� par Kioob
    �a, �a m'a toujours pos� probl�me j'ai pris l'habitude d'indent� "� ma sauce", et j'avoue avoir du mal � en d�mordre...

    �a donne :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    <?php
    function maFonction() {
         instructions
        }
    C'est � dire un m�lange de la (1) et la (3).
    J'avoue que je suis m�ga retissent � ce genre de pr�sentation, je pr�f�re de loin
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    function maFonction()
    {
       instruction
    }
    car elle est tr�s lisible, on voit de suite le code compris dans l'acolade.
    Testez le forum Fire Soft Board, un forum libre, gratuit et fran�ais.

    Syst�me de template de phpBB - Lisez la FAQ PHP avant toute question si vous d�buttez en PHP.

  2. #122
    Membre averti
    Inscrit en
    D�cembre 2004
    Messages
    46
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2004
    Messages : 46
    Par d�faut
    Bonjour, j'aimerais savoir si les commentaires et autres choses trucs inutiles ont une incidence sur la vitesse d'ex�cution d'une page appel�e tr�s souvent.

    Dans mon cas, il s'agit d'un script d'environnement appel� tr�s tr�s souvent g�rant mon site (il s'agit d'un jeu en php, le script g�rant par exemple l'IA des cr�atures)

    Un matin je me suis lev�, et j'ai liquid� tout commentaire, indentation, etc... Le fichier est pass� de 80ko � 50ko

    Le fait est que le fichier peut �tre appel� plusieurs centaines (milliers de fois ?) par jour, ce qui repr�sente autant de fois 30ko de moins de charg�.

    J'ai fait de m�me sur les pages principales (les plus vues par les visiteurs).

    Je suis conscient que php comme les autres compilateurs ignorent les commentaires en compilant, mais contrairement aux autres langages, on obtient pas de fichier "compil�", et donc je me suis dit qu'� chaque fois le serveur rechargeait en ram le fichier complet, et donc si un fichier de 100 ko est vu par 10 visiteurs en meme temps, le serveur prendra 1 Mo en gros de ram pour les compiler.

    Je voulais savoir si dans l'id�e c'�tait int�ressant, ou si ct inutile (par exemple si les serveurs �taient de base optimis� pour �viter de recompiler 15 fois les m�mes fichiers en ne gardant qu'une occurence du fichier d'origine en ram) ?


    Autre question que je n'ai pas vu ici (j'ai lu les 10 pages :p) :

    Je d�coupe �norm�ment mes sources (pour mon jeu, j'en suis � 700 pages php) de fa�on � pouvoir retoucher plus facilement telle ou telle partie. Mais du coup je suis confront� � un soucis : include ou require ? include_once ? require_once ?

    je me retrouve souvent avec 4 ou 5 require en d�but de fichier (suite au test de session ou autre). Il y a assez peu de page ou un fichier est inclu "forc�ment", j'ai donc opt� pour le require. Mais dans le cas par exemple du fichier de connexion (pratiquement appel� partout), ne vaut il pas mieux appeler include ? Avec 2 ou 3 millions de pages vue par mois, et les 2/3 avec un appel � ce fichier, m�me si c quelques millisecondes, �a peut finir par �tre un gain de temps (et le contraire aussi niveau perte m�moire, etc...). Pour les *_once, sont ils vraiment utiles si on compare � un simple "function_exists" d'une fonction pr�sente dans le fichier � inclure ? (par exemple une page peut �tre appel�e � partir d'une ayant d�j� d�clar�e une fonction, et d'une autre ne l'ayant pas fait)


    voila voila... merci

  3. #123
    Membre �m�rite
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par d�faut
    Hello,

    oui les commentaires et autres "choses trucs inutiles" ont une l�g�re incidence sur le temps de "compilation". Mais ce n'est pas pour �a qu'il faut les supprimer !!! Le plus sage est plutot d'installer un cache d'opcode (Turck MMCache par exemple) qui �vitera � PHP de recompiler le script syst�matiquement.

    Pour les inclusions, require et include sont quasiment identiques depuis "belle lurette" : ce n'est que la gestion des erreurs qui change.
    Quant � include_once() vs include(), la premi�re est l�g�rement plus lente, puisqu'elle inclus un test suppl�mentaire ; ce qui ne veut pas dire que tu ferais mieux autrement.

    A mon avis tu ne cherches pas forc�ment o� il faut : regarde d�j� du cot� de la compression des pages, des caches HTTP, des caches de donn�es et/ou html, etc.

  4. #124
    Membre averti
    Inscrit en
    D�cembre 2004
    Messages
    46
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2004
    Messages : 46
    Par d�faut
    quand je parle de retirer tout commentaire, et autres trucs inutiles, je veux dire que j'ai 2 fois la page : la page pour d�velopper, et la page � uploader "nettoy�e"

    �videmment, dans un soucis de d�veloppement tranquille, je garde tout

    Le probleme des caches, c que mes pages sont identiques au niveau source, mais le r�sultat est diff�rent pour chaque visiteur (sans compter que pour les pages style forum assez visit�, il vaut mieux voir les messages en direct plut�t qu'avec un cache :p)

  5. #125
    Membre �m�rite
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par d�faut
    Sur mon forum j'ai un cache de donn�es, et un cache HTTP.... �a ne pose aucun probl�me.... quand c'est bien fait.
    Et le gain est �videment �norme.

  6. #126
    Membre habitu�
    Inscrit en
    F�vrier 2003
    Messages
    13
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 13
    Par d�faut
    Tous les commentaires ne sont que mon avis (ou experience) ;-)

    Citation Envoy� par Grey
    Je voulais savoir si dans l'id�e c'�tait int�ressant, ou si ct inutile (par exemple si les serveurs �taient de base optimis� pour �viter de recompiler 15 fois les m�mes fichiers en ne gardant qu'une occurence du fichier d'origine en ram) ?
    Globalement tu gagneras de la m�moire RAM, ce qui peut etre utile notamnent pour ton jeu.
    Le must reste le cache m�me si tu risque d'avoir peu de partie cachable dans ton jeu (sauf si tu utilises un systeme de template).

    Si tu veux vraiement gagner de la m�moire �vite de charger des fonction inutile.
    Par exemple si tu cr�es une classe avec 10 fonction et que 95% du tps tu n'utilises que 2 fonctions, il y a surement qqch � faire pour d�coupler ta classe et ainsi gagner de la m�moire.

    Citation Envoy� par Grey
    je me retrouve souvent avec 4 ou 5 require en d�but de fichier (suite au test de session ou autre). Il y a assez peu de page ou un fichier est inclu "forc�ment", j'ai donc opt� pour le require.
    Attention ! Mauvaise habitude.
    Il est pr�f�rable d'utiliser des classes test si tu veux v�rifier tes fichiers, avec un si gros projet tu gagneras du temps.

    Sinon je prefere require_once() que require car on evite d'inclure plusieurs fois les fichiers (et �a prend de la m�moire)

    Quel est le jeu

  7. #127
    Membre r�gulier
    Inscrit en
    D�cembre 2004
    Messages
    10
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2004
    Messages : 10
    Par d�faut
    Citation Envoy� par Kioob
    Sur mon forum j'ai un cache de donn�es, et un cache HTTP.... �a ne pose aucun probl�me.... quand c'est bien fait.
    Et le gain est �videment �norme.
    Salut,

    aurais tu de bons petits liens pour expliquer comment c est petites choses doivent etre mise en place ?

    ca m interesse

  8. #128
    Membre averti
    Inscrit en
    D�cembre 2004
    Messages
    46
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2004
    Messages : 46
    Par d�faut
    Grey a �crit:

    je me retrouve souvent avec 4 ou 5 require en d�but de fichier (suite au test de session ou autre). Il y a assez peu de page ou un fichier est inclu "forc�ment", j'ai donc opt� pour le require.


    Attention ! Mauvaise habitude.
    Il est pr�f�rable d'utiliser des classes test si tu veux v�rifier tes fichiers, avec un si gros projet tu gagneras du temps.

    Sinon je prefere require_once() que require car on evite d'inclure plusieurs fois les fichiers (et �a prend de la m�moire)
    En fait, �a se passe g�n�ralement comme �a :

    include "entete"
    et la page elle meme

    l'entete contient l'include de connexion � la base (pour les pages de jeu qui oblige � r�cup�rer les donn�es du perso)

    puis un test sur la validit� de la session, sur l'homog�n�it� des donn�es, et leur contenu (qu'elles soient toute la, etc..)

    si un truc cloche, je redirige vers une page logout
    sinon on continue vers la page, ou il y aura les fameux require (qui ne sont qu'une fois par page, et qui ne sont donc inclu que si le test des donn�es est pass�es)



    Par contre en lisant les optimisations, je me rend compte que je pourrais optimiser les connexions � la base (un jeu g�n�rant beaucoup de connexion, vaut mieux les lib�rer d�s que plus n�cessaire, avant de lancer la construction de la page d'apr�s les donn�es r�cup)


    Question :

    vaut il mieux faire

    ** Connexion
    ** Requete
    traitement
    ** eventuelle requete
    traitement
    ** requete (derniere)
    ** Fin de connexion
    autre traitement

    ou

    ** Connexion
    ** Requete
    ** Fin de connexion
    traitement
    ** Connexion
    ** eventuelle requete
    ** Fin de connexion
    traitement
    ** Connexion
    ** requete (derniere)
    ** Fin de connexion

    ?

    on lib�re les acc�s, mais en meme temps, �a risque de multiplier les demandes d'acc�s

    je vais essayer aussi de revoir les pages ou je peux regrouper toutes les requetes en un paquet pour lib�rer plus vite la connexion, mais bien souvent elles d�pendent d'autres choses...

    enfin bref, sinon comme montou je suis int�ress� par le systeme de cache
    (je suis pas fort en admin, je fais g�rer le serveur par un tiers)

    autre traitement

  9. #129
    Membre habitu�
    Inscrit en
    F�vrier 2003
    Messages
    13
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 13
    Par d�faut
    Pour les bases de donn�es, il faut (normalement)

    - Connexion Base
    Toutes les requetes
    Fermeture

    - Traitement des donn�es (template ou autres)


    En gros, jamais fermer � la fin

    Sinon pour le cache, regarde PEAR

  10. #130
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 21
    Par d�faut
    si vous avez deux boucles imbriqu�es les une dans les autres, dans le style :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    for ($i = 0; $i < 256; $i++) {
       for ($j = 0; $j < 256; $j++) {
          code
       }
    }
    il est tr�s pr�f�rable de faire :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    $i, $j = 0;
    while ($i < 256) {
      code
      if ($j < 255) { $j++; }
      else { $j = 0; $i++; }
    }
    Gain de performances garantis

  11. #131
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 23
    Par d�faut
    Noteirak j'ai bien peur que le code que tu as post� (le second) soit faux pour plusieurs raisons:
    • $i va de 0 � 256 inclus. La boucle for du premier exemple va de 0 � 255 inclus.
    • dans le premier exemple, ($i<256) est �valu� 256 fois, ($j<256) est �valu� 65536 fois. Dans le second exemple, les deux conditions sont �valu�es 65536 fois chacunes, ce qui rend ton code 60% plus lent qu'une simple boucle for. (benchmark� sous PHP5.1-dev)

    � priori, dans l'exemple fourni le plus rapide serait:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $i = 0;
    do
    {
    	$j = 0;
    	do
    	{
    		// code
    	}
    	while (++$j !== 256);
    }
    while (++$i !== 256);

  12. #132
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    21
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 21
    Par d�faut
    je m'excuse, je me suis tromp� de code pour le 1er exemple, voici le bon :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $i = 0;
    $j = 0;
    while ($i < 256) {
    	while ($j < 256) {
    		...
    		$j++;
    	}
    	$j = 0;
    	$i++;
    }
    J'ai fait le benchmark, le second est 10% plus rapide.

    Pour l'histoire du 0 � 256, il doit aller de 0 � 255 inclus, ce que font bien mes deux codes, et pas aller de 0 � 256 (vu que je veux 256 boucles pour chaque).
    Ce que je veux dire, c'est si vous devez imbriquez deux boucles whiles, ou deux boucles for, pr�f�rez-leur une seule avec une v�rification � la fin

  13. #133
    Membre chevronn�
    Avatar de genova
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    487
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 487
    Par d�faut
    Petite question d'optimisation, l'utilisation des r�f�rences avec & est elle une solution pratique ou bel et bien un gain de temps comme en C par exemple ou il est pr�f�rable d'utiliser des pointeurs ?
    Testez le forum Fire Soft Board, un forum libre, gratuit et fran�ais.

    Syst�me de template de phpBB - Lisez la FAQ PHP avant toute question si vous d�buttez en PHP.

  14. #134
    Membre �m�rite
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Par d�faut
    Je ne sais pas si cela a chang� dans les nouvelles versions, mais quand il s'agit d'une petite quantit� de donn�es les r�f�rences sont plus lentes. C'est un des ph�nom�nes curieux de PHP...

  15. #135
    Membre averti
    Profil pro
    Inscrit en
    D�cembre 2004
    Messages
    23
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2004
    Messages : 23
    Par d�faut
    Citation Envoy� par Noteirak
    Pour l'histoire du 0 � 256, il doit aller de 0 � 255 inclus, ce que font bien mes deux codes
    Non, le second ne le fait pas d�sol�. Mais c'est vrai que je me suis tromp�, ce n'est pas $i qui va de 0 � 256, c'est $j. Tu peux le v�rifier par toi-m�me. Quant � ton 3eme exemple... il ne suit pas ce que tu proposes ("une seule avec v�rification � la fin") et il est plus lent que celui que j'ai post� plus haut. Sous PHP5.1-dev, sur 2^24 (65536x65536) it�rations vides (c-�-d sans code autre que la boucle): 3.85s pour mon code, 11.73s pour ton 3eme exemple.

    Citation Envoy� par dark_genova
    Petite question d'optimisation, l'utilisation des r�f�rences avec & est elle une solution pratique ou bel et bien un gain de temps comme en C par exemple ou il est pr�f�rable d'utiliser des pointeurs ?
    Comme je le disais ailleurs, n'utilisez pas les r�f�rences durant le d�veloppement dans un soucis de performance. Si ton code est mature (c-�-d stable depuis quelques temps) tu peux benchmarker l'utilisation de r�f�rences aux points-cl�, mais le gain est loin d'�tre syst�matique. HTH.

  16. #136
    Membre exp�riment�
    Avatar de Caerbannog
    Inscrit en
    Novembre 2004
    Messages
    206
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 206
    Par d�faut
    Un truc �vident, mais auquel on doit faire attention d�s le d�but : ne pas charger un fichier avec file() si on est pas interress� par tout son contenu.

  17. #137
    Membre averti
    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    52
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 52
    Par d�faut
    Bonjour,

    J'ai besoin d'extraire une grosse quantit� de donn�e depuis mysql pour les envoyer vers jpgraph.

    Y a t-il plus rapide que le classique:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    while($row=mysql_fetch_array($result, MYSQL_ASSOC);)
    {
        $tab_val[] = $row['michMuch']
    }
    ?

    Il va falloir que je me plonge dans le code de phpMyAdmin mais je vois que la meme requete sql met enorm�ment plus de temps � �tre ex�cut� et renvoy� dans mon script que dans phpmyadmin :-\

  18. #138
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    41
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 41
    Par d�faut
    Essaye plut�t mysql_fetch_row. Si tu as bcp d'enregistrements �a peut am�liorer la rapidit� de ton script.

  19. #139
    Membre averti
    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    52
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 52
    Par d�faut
    Citation Envoy� par fragmonster
    Essaye plut�t mysql_fetch_row. Si tu as bcp d'enregistrements �a peut am�liorer la rapidit� de ton script.
    Merci de ta r�ponse. En cherchant d'avantage j'ai vu que la perte de temps �tait surtout � l'�tape mysql_query et l� je pense qu'il ne me reste plus grand chose � faire ...

  20. #140
    Nouveau candidat au Club
    Inscrit en
    Mars 2005
    Messages
    2
    D�tails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 2
    Par d�faut
    Bonjour,

    J'ai un script PHP que je lance manuellement grosso modo 2 fois par jour. Il fait beaucoup d'acc�s et de mises � jour � ma base mySql et du coup pendant qu'il tourne, ma base est indisponible.

    Vu que mon script est vraiment s�quenc� en plusieurs �tapes bien distinctes, j'ai essay� de mettre de nombreux sleep(2) entre les �tapes mais rien n'y fait, ma base ne redevient disponible qu'� la fin du script.

    C'est assez genant vu que ma base h�berge entre autre des forums. Du coup lorsque ce gros script tourne, les forums et les sites qui vont chercher des infos dans la base sont out

    Quelqu'un a t il un d�but de piste ?

    Merci

Discussions similaires

  1. [D�butant] Acc�l�rer et optimiser ses scripts PHP
    Par Metallic-84s dans le forum Langage
    R�ponses: 6
    Dernier message: 24/03/2006, 12h37
  2. [MySQL] [SGBD] Script PHP/MYSQL d'access FTP
    Par ChRom dans le forum PHP & Base de donn�es
    R�ponses: 1
    Dernier message: 09/01/2006, 01h52
  3. R�ponses: 9
    Dernier message: 05/01/2006, 12h24
  4. Recherche Login Script PHP & MySQL
    Par whbh dans le forum SQL Proc�dural
    R�ponses: 9
    Dernier message: 01/12/2005, 16h45
  5. [MySQL] [Script]Optimisation de scripts Php/MySQL (2)
    Par copy dans le forum PHP & Base de donn�es
    R�ponses: 8
    Dernier message: 27/08/2004, 08h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo