Publicité
+ Répondre à la discussion
Page 8 sur 19 PremièrePremière ... 45678910111218 ... DernièreDernière
Affichage des résultats 141 à 160 sur 369
  1. #141
    Membre chevronné
    Avatar de genova
    Inscrit en
    septembre 2004
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 487
    Points : 742
    Points
    742

    Par défaut

    Optimise ton script ...
    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. #142
    Invité de passage
    Inscrit en
    mars 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 2
    Points : 2
    Points
    2

    Par défaut

    L'optimisation n'est pas évidente.

    Peux t on grouper en mysql un envoi de requetes ?
    En fait mon script fais 60 fois la meme étape (calculs divers) pour à chaque fois faire un update d'une ligne d'une table (ligne différente à chaque fois)

    Peut etre serait il possible d'atttendre d'avoir toutes les requetes pour les envoyer en une fois à la base ?

  3. #143
    Membre chevronné
    Avatar de genova
    Inscrit en
    septembre 2004
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 487
    Points : 742
    Points
    742

    Par défaut

    Tu peux faire un copie colle de ton script ici qu'on voye ce qu'il y a a optimiser ?
    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.

  4. #144
    Membre Expert Avatar de Celelibi
    Inscrit en
    janvier 2004
    Messages
    1 087
    Détails du profil
    Informations forums :
    Inscription : janvier 2004
    Messages : 1 087
    Points : 1 053
    Points
    1 053

    Par défaut

    J'ai eut besoin il y a quelques jours de tester si la solution utilisant MySQL était plus rapide que la solution utilisant PHP.

    Ma question était de tester si une ligne existait dans une table. Il ne pouvait y avoir au maximum qu'une seul ligne.
    Donc vallait-il mieux sélectionner la ligne et tester son existance avec mysql_num_rows(), ou alors utiliser la fonction COUNT() de MySQL, puis ensuite récupérer un tableau avec mysql_fetch_array puis en extraite la valeur voulue ?

    Pour répondre à cette question j'ai réalisé un benchmark
    Résultat (pour ma machine) : une moyenne de 22 ms pour le mysql_num_rows contre 15ms pour COUNT.
    (Pour ce test j'ai réalisé 100000 itérations allant de la requête jusqu'a la récupération concrète du nombre de ligne.)


    Maintenant ça peut parraitre un peu bêtat de dire que c'est plus rapide en utilisant les fonction de mysql, mais à l'origine cette question ne m'a pas parru évidente.

    Je pense donc que ceci est généralisable à la plus part des cas : préférer la solution MySQL lorsque vous avez le choix entre une solution MySQL et PHP.


    J'en profite pour poser une petite question : vaut-il mieux stoquer dans une bdd les dates sous formes d'unix timestamp (dans un champ de type INT) ou un des formats de date de mysql ?
    Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter.

  5. #145
    Membre chevronné
    Avatar de genova
    Inscrit en
    septembre 2004
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 487
    Points : 742
    Points
    742

    Par défaut

    Benchmark est ton ami dans ce cas
    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.

  6. #146
    Membre chevronné
    Avatar de Kioob
    Profil pro Olivier Bonvalet
    Inscrit en
    septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Nom : Olivier Bonvalet
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : septembre 2004
    Messages : 550
    Points : 761
    Points
    761

    Par défaut

    Citation Envoyé par Celelibi
    J'en profite pour poser une petite question : vaut-il mieux stoquer dans une bdd les dates sous formes d'unix timestamp (dans un champ de type INT) ou un des formats de date de mysql ?
    Si tu utilises le format DATE de MySQL, tu pourras faire un grand nombre de calcul directement via MySQL. Et si besoin, tu pourras quand même récupèrer le timestamp UNIX, via la fonction MySQL dédiée à cela.

    Par contre si tu stockes en timestamp, tu vas être fortement limité question calculs, et un grand nombre de taches risque d'etre relégué à PHP.

  7. #147
    Inscrit
    Profil pro
    Inscrit en
    décembre 2004
    Messages
    320
    Détails du profil
    Informations personnelles :
    Âge : 26
    Localisation : Singapour

    Informations forums :
    Inscription : décembre 2004
    Messages : 320
    Points : 458
    Points
    458

    Par défaut

    DATETIME plutot non ?
    Sinon tu perd les infos heures/minutes/secondes

    La doc mysql est ton amie aussi, très intéressante je trouve :
    http://dev.mysql.com/doc/mysql/en/da...functions.html

    Existe même en francais :]
    http://dev.mysql.com/doc/mysql/fr/da...functions.html

  8. #148
    Membre chevronné
    Inscrit en
    juillet 2002
    Messages
    842
    Détails du profil
    Informations forums :
    Inscription : juillet 2002
    Messages : 842
    Points : 707
    Points
    707

    Par défaut

    Bonsoir,

    Si je veux accèder à n données, uniques, mais accèdées à chaque execution d'un script, vaut il mieux créer une table mysql rien que pour stocker ces n données, ou utiliser un fichier à la place ?

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $Variables = file('variables');
    ...
    $v_i = $Variables[i];
    ...
    $Variables[m] = $v_m;
    ...
    $Fichier = fopen('variables','a');
    fwrite ($Fichier, join("\n", $Variables));
    fclose($Fichier);
    Ou un genre de schéma similaire ?

  9. #149
    Membre chevronné
    Avatar de genova
    Inscrit en
    septembre 2004
    Messages
    487
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 487
    Points : 742
    Points
    742

    Par défaut

    Si tu utilises énormément de SELECT de ton fichier (c'est à dire de lecture) et que tu utilises relativement peut d'écriture (UPDATE, INSERT) je te conseil de passer par un fichier, mais stoque ces fichiers sous forme de tableau PHP avec var_export().

    Par exemple :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    $ary = array(
       0 => array(
          'champ1' => 'valeur1',
          'champ2' => 'valeur2'
       ),
       1 => array(
          'champ1' => 'valeur1',
          'champ2' => 'valeur2'
       ),
       2 => array(
          'champ1' => 'valeur1',
          'champ2' => 'valeur2'
       ),
    );
    ?>
    Un simple include() et hop le tour est joué.



    A part ça j'ai effectué un benchmark qui m'a largement surpris. J'ai fait une fonction de test qui recoit de trois facon un tableau de 1000 éléments. Il recoit ce tableau en paramètre lors du premier test, lors du second test en global, lors du troisième par référence.

    Je fais une itération de 10000 tour avec appel de fonction, le résultat est sans appel :
    passage du tableau en argument : 5.0572290420532 secondes
    passage par globalisation : 0.026066064834595 secondes
    Passage par référence : 0.024504899978638 secondes


    Voici le code utilisé pour le passage en argument :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
    include('function.php');
    include('class_benchmark.php');
    $ary = array();
    for ($i = 0; $i < 1000; $i++)
    {
       $ary[$i] = $i * $i;
    }
    function test($ary)
    {
       $ary[0]++;
    }
    $bench = new bench();
    for ($i = 0; $i < 10000; $i++)
    {
       test($ary);
    }
    $bench->finish();
    ?>
    J'en conclu qu'il faut fortement éviter de passer des grosses données par argument à sa fonction (ce qui parait logiquie car toute la mémoirre alouée pour cet élément est passée à la fonction).
    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.

  10. #150
    Membre chevronné
    Inscrit en
    juillet 2002
    Messages
    842
    Détails du profil
    Informations forums :
    Inscription : juillet 2002
    Messages : 842
    Points : 707
    Points
    707

    Par défaut

    J'ai du mal m'exprimer. Je voulais dire n variables :

    Variable 1
    Variable 2
    ...
    Variable n

    qu'on peut coder en mysql comme une table avec deux champs "Nom Variable" et "Valeur" (ou en une seule ligne ^^ mais c'est pas beau)

  11. #151
    Invité régulier
    Inscrit en
    janvier 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : janvier 2004
    Messages : 5
    Points : 6
    Points
    6

    Par défaut

    Citation Envoyé par dark_genova
    Je fais une itération de 10000 tour avec appel de fonction, le résultat est sans appel :
    passage du tableau en argument : 5.0572290420532 secondes
    passage par globalisation : 0.026066064834595 secondes
    Passage par référence : 0.024504899978638 secondes
    effectivement, c assez impressionant ..

  12. #152
    Membre régulier Avatar de titoon
    Profil pro
    Inscrit en
    janvier 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : janvier 2005
    Messages : 71
    Points : 88
    Points
    88

    Par défaut

    Citation Envoyé par dark_genova
    J'en conclu qu'il faut fortement éviter de passer des grosses données par argument à sa fonction (ce qui parait logiquie car toute la mémoirre alouée pour cet élément est passée à la fonction).
    ??
    C'est surtout parce que dans une fonction, PHP travaille sur des copies des variables passées en paramètre (donc si tu passes un bon gros tableau en paramètre, PHP va devoir le copier)

  13. #153
    Membre à l'essai
    Profil pro
    Inscrit en
    mars 2003
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : mars 2003
    Messages : 31
    Points : 24
    Points
    24

    Par défaut

    Salut,

    j'ai une question qui me turlupine :

    Dois-je systématiquement activer la compression GZip ? Je voudrais savoir si elle correspond à un type de sites particuliers, ou bien si elle est efficace dans tous les cas ?

    Je suis en train de faire un projet à la SPIP, et je me demande simplement si je dois faire une constante GZIP pour activer ou non la compression HTTP...

    Merci de votre aide.

  14. #154
    131
    131 est déconnecté
    Invité de passage
    Inscrit en
    mai 2005
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : mai 2005
    Messages : 1
    Points : 1
    Points
    1

    Par défaut

    Pourquoi alors ne pas travailler qu'avec des référence ?
    Est-ce un reflexe à prendre ?

  15. #155
    Membre régulier
    Homme Profil pro Joseph Cachico
    Chef de projet en SSII
    Inscrit en
    mai 2005
    Messages
    112
    Détails du profil
    Informations personnelles :
    Nom : Homme Joseph Cachico
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : mai 2005
    Messages : 112
    Points : 78
    Points
    78

    Par défaut

    Citation Envoyé par iubito
    Citation Envoyé par _Gabriel_
    salut,

    - les calculs répétés dans les boucles du style

    Code :
    for($i=0;$i<sizeof($arr);$i++)
    ca c'est pas bon!!!
    peux-tu préciser un peu, je capte pas là...
    A chaque tour dans la boucle tu calcule le alors en le sortant avant la boucle tu le calcule une fois pour toutes.
    Au bout de la boucle tu aurra economisé du temps...

  16. #156
    Membre régulier Avatar de titoon
    Profil pro
    Inscrit en
    janvier 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : janvier 2005
    Messages : 71
    Points : 88
    Points
    88

    Par défaut

    Citation Envoyé par jcachico
    Citation Envoyé par iubito
    Citation Envoyé par _Gabriel_
    salut,

    - les calculs répétés dans les boucles du style

    Code :
    for($i=0;$i<sizeof($arr);$i++)
    ca c'est pas bon!!!
    peux-tu préciser un peu, je capte pas là...
    A chaque tour dans la boucle tu calcule le alors en le sortant avant la boucle tu le calcule une fois pour toutes.
    Au bout de la boucle tu aurra economisé du temps...
    Pour info, il existe en PHP une boucle tout spécialement prévue pour parcourir les tableaux... cf foreach
    Et quelques notes en plus sur les différentes boucles

  17. #157
    Nouveau Membre du Club
    Développeur Web
    Inscrit en
    avril 2005
    Messages
    19
    Détails du profil
    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : avril 2005
    Messages : 19
    Points : 30
    Points
    30

    Par défaut

    oui mais il arrive qu'on ne veuille pas les deux premières cases du tableau...dans ce cas un for est bien pratique.

  18. #158
    Membre chevronné
    Inscrit en
    juillet 2002
    Messages
    842
    Détails du profil
    Informations forums :
    Inscription : juillet 2002
    Messages : 842
    Points : 707
    Points
    707

    Par défaut

    Si j'ai deux tables A et B, et je veux selectionner des enregistrements de A, et quelques enregistrement de B associés. Du style

    Code :
    SELECT ... FROM A LEFT OUTER JOIN B ON A.Id = B.Id AND A.Cle = 'Constante'
    Vaut il mieux faire réelement la jointure externe, ou vaut il mieux tout rappattrier par une jointure interne, et trier après ce que je garde ou non dans chaque enregistrement ?

    Code :
    SELECT ... FROM A  JOIN B ON A.Id = B.Id
    Code :
    1
    2
    3
    4
    5
    6
    $Enregistrement = mysql_fetch_array();
     
    if ($Enregistrement[Cle] == 'Constante')
      ...
    else
      ...

  19. #159
    Candidat au titre de Membre du Club
    Homme Profil pro Dylann Cordel
    Développeur Web
    Inscrit en
    juillet 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Nom : Homme Dylann Cordel
    Âge : 29
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juillet 2005
    Messages : 12
    Points : 11
    Points
    11

    Par défaut

    Bonjour,


    Interessant ce sujet. Je l'ai trouvé en cherchant justement quel était le plus rapide entre un while et un foreach.

    J'ai beaucoup vu que vous parliez de libérer la mémoire du server, mais celà se fait au détriment du CPU non ?

    Donc faut il vraiment détruire les variables temporaires à chaque fois, et libérer les résult Mysql, ce qui libère de la mémoire mais utilise le CPU à chaque appel de fonction ?

    J'apporte ma pierre à l'édifice. Enfin... Disons mon petit caillou plutôt, mais c'est l'intention qui compte ^^ :

    Lorsque vous devez compter un nombre d'enregistrement d'une table compotant un champ 'id', et que cette table ne subit jamais d'effacement (table contenant chaque connection au site par exemple, pour faire un compteur avec stats sur le pays etc.) plutôt que de faire un Where 1 et compter le nombre de lignes retournées, faites un Where 1 order by id desc limit 0,1

    L'id retourné est le dernier et correspond au nombre d'enregistrement puisque dans ce genre de table aucun n'est supprimé. Donc un seul enregistrement retourné au lieu de tous.

  20. #160
    Membre chevronné
    Inscrit en
    juillet 2002
    Messages
    842
    Détails du profil
    Informations forums :
    Inscription : juillet 2002
    Messages : 842
    Points : 707
    Points
    707

    Par défaut

    Il est très difficile de faire les bons tests de rapidités. Beaucoup de tests sur internet montrent que pour charger le contenu d'un fichier la fonction file_get_content est la plus rapide. En pratique, fgets peut être de 20 % plus rapide à infiniement plus long suivant les paramètres. 20 % sur le chargement d'un gros fichier, ce n'est pas rien.

    Il y a toujours un tas de paramètres que l'on oublie, et l'optimisation n'est pas simple. Le pire est qu'elle dépend avant tout de la machine sur laquelle le script tourne. D'une machine à l'autre, d'une configuration à l'autre, les meilleures solutions ne seront pas toujours les mêmes.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •