|
Publicité ' | ||||||||||||||||||||||||
|
|
#141 |
|
Membre chevronné
![]() ![]() |
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. |
|
|
00
|
|
|
#142 |
|
Invité de passage
![]() Inscription : mars 2005 Messages : 2 ![]() |
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 ? |
|
|
00
|
|
|
#143 |
|
Membre chevronné
![]() ![]() |
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. |
|
|
00
|
|
|
#144 |
|
Membre émérite
![]() Inscription : janvier 2004 Messages : 1 060 ![]() |
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. |
|
|
00
|
|
|
#145 |
|
Membre chevronné
![]() ![]() |
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. |
|
|
00
|
|
|
#146 | |
|
Membre chevronné
![]() |
Citation:
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. |
|
|
|
00
|
|
|
#147 |
|
Inscrit
Inscription : décembre 2004 Messages : 320 ![]() |
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 |
|
00
|
|
|
#148 | ||
|
Membre chevronné
![]() Inscription : juillet 2002 Messages : 842 ![]() |
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 :
|
||
|
|
00
|
|
|
#149 | ||||
|
Membre chevronné
![]() ![]() |
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 :
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 :
__________________
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. |
||||
|
|
00
|
|
|
#150 |
|
Membre chevronné
![]() Inscription : juillet 2002 Messages : 842 ![]() |
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) |
|
|
00
|
|
|
#151 | |
|
Invité régulier
![]() Inscription : janvier 2004 Messages : 5 ![]() |
Citation:
|
|
|
|
00
|
|
|
#152 | |
|
Membre régulier
![]() Inscription : janvier 2005 Messages : 71 ![]() |
Citation:
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) |
|
|
00
|
|
|
#153 |
|
Nouveau Membre du Club
![]() Inscription : mars 2003 Messages : 31 ![]() |
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. |
|
|
00
|
|
|
#154 |
|
Invité de passage
![]() Inscription : mai 2005 Messages : 1 ![]() |
Pourquoi alors ne pas travailler qu'avec des référence ?
Est-ce un reflexe à prendre ? |
|
|
00
|
|
|
#155 | ||
|
Membre régulier
![]() Joseph CachicoChef de projet en SSII Inscription : mai 2005 Messages : 111 ![]() |
Citation:
Au bout de la boucle tu aurra economisé du temps...
|
||
|
|
00
|
|
|
#156 | |||
|
Membre régulier
![]() Inscription : janvier 2005 Messages : 71 ![]() |
Citation:
Et quelques notes en plus sur les différentes boucles là |
|||
|
00
|
|
|
#157 |
|
Futur Membre du Club
![]() Développeur Web Inscription : avril 2005 Messages : 17 ![]() |
oui mais il arrive qu'on ne veuille pas les deux premières cases du tableau...dans ce cas un for est bien pratique.
|
|
00
|
|
|
#158 | ||
|
Membre chevronné
![]() Inscription : juillet 2002 Messages : 842 ![]() |
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'
Code :
SELECT ... FROM A JOIN B ON A.Id = B.Id Code :
|
||
|
|
00
|
|
|
#159 |
|
Candidat au titre de Membre du Club
![]() |
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. |
|
00
|
|
|
#160 |
|
Membre chevronné
![]() Inscription : juillet 2002 Messages : 842 ![]() |
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. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com