|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : avril 2004 Messages : 102 ![]() |
Tout d'abord, je dois vous prévenir que je suis encore assez novice dans la programmation en php
Voici mon problème. J'ai développé une application qui permet de gérer les chargements des camions dans mon entreprise. Les ventes encodent les commandes 1 par 1 et le magasin complète le tout au fur et à mesure de l'avancement du travail. La vue au niveau magasin est sous la forme d'un formulaire par livraison, ce qui peut représenter plus de 200 formulaires affichés les uns en dessous des autres (il n'y a que les livraisons de la semaine qui apparaissent). Je ne connais absolument pas les besoins en ressource d'un serveur PHP, ni d'une station "cliente", toujours est-il que lorsqu'on affiche la page contenant tous ces formulaires, il faut facilement 2-3 minutes avant que tout ne soit charger et pendant ce temps, le PC est à 100% d'utilisation du CPU. Si on valide des formulaires, ça peut prendre plus de 5 minutes avant qu'elle ne soit accessible à nouveau. Est-ce que quelqu'un peut m'aider, car ça devient très problématique ? Merci d'avance. |
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Ah les perfs....
Il faut tout d'abord que tu détermine le bottleneck : - est-ce les requêtes à la db qui prenent du temps ? - est-ce le traitement php ? Pour ça je te suggère d'utiliser l'exemple 568 pour détecter la portion de code qui prend du temps Code :
__________________
Get your motor runnin' Head out on the highway... |
||
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : avril 2004 Messages : 102 ![]() |
Merci beaucoup.
Lorsque j'affiche le temps d'exécution de ma requete qui va chercher les données dans la table, ça me donne : -1175087155.61 secondes. Une valeur négative ??? |
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Fais voir le bout de code en question ?
__________________
Get your motor runnin' Head out on the highway... |
|
|
00
|
|
|
#5 | ||||
|
Invité régulier
![]() Inscription : avril 2004 Messages : 102 ![]() |
Voici une partie du code, parce que le reste (càd la création des formulaires) est très très long.
Code :
Code :
|
||||
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Elle est définie où la fonction microtime_float() ?
__________________
Get your motor runnin' Head out on the highway... |
|
|
00
|
|
|
#7 | ||
|
Invité régulier
![]() Inscription : avril 2004 Messages : 102 ![]() |
Juste avant la fonction encodageWh()
Code :
|
||
|
|
00
|
|
|
#8 | ||||
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Ok. peux tu remplacer ce code :
Code :
Code :
__________________
Get your motor runnin' Head out on the highway... |
||||
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() Inscription : avril 2004 Messages : 102 ![]() |
Voici les résultats que j'ai :
float(1175090303.98) float(1175090304.29) -1175090303.98 secondes |
|
|
00
|
|
|
#10 |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
essaie de mettre des parentheses :
Code :
echo '<b>La requête a pris '. ($time_end - $time_start) .' secondes</b>';
__________________
Get your motor runnin' Head out on the highway... |
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() Inscription : avril 2004 Messages : 102 ![]() |
|
|
|
00
|
|
|
#12 |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Je pense que ça vaut le coup de continuer dans tes investigation. Est-ce que c'est le for ? le while ? le deuxième while ? le troisième qui prend du temps ?
Sinon essaie de faire un echo de tes données de temps en temps au lieu de faire une énorme concaténation. Ca ne va pas résoudre le problème de lenteur, mais ça permettras d'afficher des données à l'utilisateur
__________________
Get your motor runnin' Head out on the highway... |
|
|
00
|
|
|
#13 | ||
|
Invité régulier
![]() Inscription : avril 2004 Messages : 102 ![]() |
Lorsque je calcule le temps d'exécution de toutes la création du formulaire (je démarre le compteur juste avant le "FOR"), j'ai le résultat suivant : La requête a pris 0.490092992783 secondes
J'en déduit donc que ce n'est pas là que ce trouve le problème. Est-ce que ça pourrait provenir de ma page d'origine, qui appelle la fonction de création des formulaires et qui les affiche ??? Pour en être certain, je poste ci-dessous le code de cette page. Code :
|
||
|
|
00
|
|
|
#14 |
|
Membre habitué
![]() Inscription : décembre 2006 Messages : 109 ![]() |
juste pour être certain à mon tour, est-ce qu'il y a réellement affichage de 9000 input/select coté client ?
|
|
|
00
|
|
|
#15 |
|
Invité régulier
![]() Inscription : avril 2004 Messages : 102 ![]() |
Il y a 51 champs par livraison à afficher dans le formulaire.
A raison de 200 - 250 livraisons au maximum par semaine, fais le calcul Je suis novice en la matière, donc je ne sais réellement pas si ça a une influence sur les performances de l'application. Si c'est le cas, existe-t-il une solution ? |
|
|
00
|
|
|
#16 |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
Essaie de générer une page normale (sans tes benchmarks)
tu l'enregistre en page html a l'aide du browser tu stockes cette page sur ton serveur tu appelles cette page, et regarde combien de temps il met pour s'afficher (tu peux utiliser javascript en stockant l'heure dans les headers et arretant le timer lors du body.onload)
__________________
Get your motor runnin' Head out on the highway... |
|
|
00
|
|
|
#17 |
![]() ![]() Inscription : août 2006 Messages : 1 207 ![]() |
1 for et 3 while, ca fait quatre boucle imbriquée, c'est beaucoup.
Fait un tests simple, tu initialises 4 compteurs a zero avant ton for, et tu en place un a chaque niveau de boucle (genre juste en dessous du for/while). Et juste apres ton for, tu affiche le contenu de tes compteur. Comme ca tu verras si c'est lent parce que tu as un nombre très grand de boucle (ce que je pense être le cas) ou si c'est parce que un des traitements dans une boucle est long. Dans un cas comme ca, avec plusieurs boucles imbriquée, il faut essayer de réduire au max le nombre d'iteration de chaque boucle. En addmetant que tu n'ai que 10 cas a tester a chaque boucle, tu as 10 (for) * 10 (while1) * 10 (while2) *10 (while3) = 1000 itérations. Si une des boucles a 100 tests a faire, tu passe directement a 10 000 iterations, et ca monte très vite. Donc les solutions envisageable : Est-il possible, en trouvant un autre algo de supprimer un ou deux boucles ? Si ce n'est pas le cas, est ce qu'il est possible de sortir des boucles avant d'avoir tout testé ? (tests redondant). J'ai déjà eu a optimiser des boucles imbriqué comme ca, je suis passé de 1 000 000 d'itérations (la page mettait de 30sec a 5mn pour s'afficher, suivant la quantité de donnée a traiter) à a peine 100 000 (affichage descendu en dessous de 5 secondes). C'est un travail de longue haleine, mais avec le code que tu as eu pour voir le temps que prend chaque portion de code et un peu de courage, ca se fait ;-))
__________________
Rakken Oneira, un monde imaginaire d'Heroic Fantasy. Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/ |
|
00
|
|
|
#18 |
|
Invité régulier
![]() Inscription : avril 2004 Messages : 102 ![]() |
Pour Mr N.
Je viens d'effectuer ce test et il met approximativement le même temps pour afficher la page. Vaut-il mieux que j'essaie de réduire au maximum le nombre d'input/select ? Pour Rakken J'ai déjà effectuer les tests sur toutes mes boucles et je ne dépasse que très rarement la second pour une boucle complète, donc je pense que le problème vient plutôt de l'affichage simple. Le test précedent confirme mes craintes. |
|
|
00
|
|
|
#19 |
|
Expert Confirmé Sénior
![]() Inscription : septembre 2004 Messages : 5 421 ![]() |
est-ce que le temps est identique en local ? (en appelant directement la page sauvegardée localement)
__________________
Get your motor runnin' Head out on the highway... |
|
|
00
|
|
|
#20 |
|
Invité régulier
![]() Inscription : avril 2004 Messages : 102 ![]() |
Non, j'ai calculé le temps par moi-même
Et c'est extrêmement long... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com