Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
767 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Pb de perfs pour traiter un planning

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Pb de perfs pour traiter un planning

n°2172392
rufo
Pas me confondre avec Lycos!
Posté le 23-01-2013 à 16:55:57  profilanswer
 

Bonjour,
 
Voilà, j'ai une appli web en PHP/Mysql qui permet de gérer des inscriptions à la cantine sur le mois et pour un ensemble de personnes. J'ai donc fait une page web qui affiche les jours du mois en colonne et les personnes en ligne, une personne par ligne. A chaque intersection, on trouve une case à cocher : si elle est cochée, la personne correspondant à la ligne est inscrite à la cantine pour le jour correspondant à la colonne.
 
Mine de rien, ça représente pas mal de cases à traiter au final (environ 100 personnes et en moyenne 20j ouvrés par mois). Sur ma station de test, ça prend un peu de temps (40s) pour traiter le formulaire et réafficher le planning. Mais en prod, c'est un serveur mutualisé et là, ben j'ai des pbs. Apparemment pas de timeout (on n'a pas de msg qui s'affiche en ce sens) mais le script s'arrête à un moment donné et réaffiche pas tout le planning ou n'a pas pris en compte en BD tous les changements. C'est pas systématique mais aléatoire. :(
 
En BD, un enregistrement à la cantine, c'est un ID d'enregistrement, la date du jour du repas, l'ID de la personne + 2-3 autres infos.
 
Auriez-vous une solution à me proposer qui ne m'obligerait pas à changer la structure de la table ou d'hébergeur ?
 
Merci par avance :jap:


Message édité par rufo le 25-01-2013 à 16:51:44

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le 23-01-2013 à 16:55:57  profilanswer
 

n°2172421
CyberDenix
Posté le 23-01-2013 à 21:06:49  profilanswer
 

Ya du JS / JQuery ou c'est du pur PHP ?
 
Qu'est-ce qui laggue, le PHP ou le JS ?
 
Quel est le poids du document généré ?


---------------
Directeur Technique (CTO)
n°2172459
rufo
Pas me confondre avec Lycos!
Posté le 24-01-2013 à 09:53:19  profilanswer
 

Très peu de JS, surtout du php et un formulaire html relativement conséquent puisque 100 personnes * 20j = 2000 cases à cocher environ :/
Le temps d'affichage du planning est entre 9s et 11s sur le serveur mutualisé.
La page html fait environ 264 ko. Le POST fait environ 122 ko et met environ 21s à être traité. En effet, en BD je ne stocke que les inscriptions des personnes pour les jours. Comme quand on poste un formulaire à base de cases à cocher, seules les cases cochées sont envoyées, j'ai mis un champ caché de type array qui contient tous les jours/personnes avec la forme suivante : date#IDpersonne#IDInscription
 
En fait, je ne traite pas directement les cases à cocher mais ce champ caché (via une boucle). Je fais un explode('#', $ValeurCouranteChampCache);
Si IDInscription == 0, ça veut dire que la personne "IDpersonne" n'est pas inscrite à la cantine pour le jour "date". Dans ce cas, je vérifie s'il était inscrit avant que le formulaire soit posté. Pour ça, je vérifie dans les cases à cocher si l'un d'elle pour le jour et la personne à une valeur "date#IDpersonne#IDInscription" dont IDInscription > 0. Si oui, je supprimer l'entrée IDInscription.
 
Si IDInscription (celui du champ caché) > 0, alors je crée une entrée dans la BD pour inscrire "IDpersonne" pour le jour "date".
 
Donc quoi qu'il arrive, je fais environ 2000 tours de boucle.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2172479
czh
Posté le 24-01-2013 à 11:11:26  profilanswer
 

Il faut mesurer ce qui prend le plus de temps :
- si c'est du traitement brut PHP : optimiser les algorithmes, utiliser du "cache" pour les résultats intermédiaire etc.
- si c'est des entrées-sorties comme les accès à la base de données.
  - nombre de requêtes à la base de données : voir s'il n'est pas possible des les regrouper
  - temps moyen d'une requête excessif : optimiser la requête, les index etc.
 
Edit : pour mesurer le temps microtime/time sont tes amis. $mtime = microtime(true); usleep(123456789); echo (microtime(true) - $mtime). ' microsecondes écoulées';


Message édité par czh le 24-01-2013 à 11:15:48
n°2172485
rufo
Pas me confondre avec Lycos!
Posté le 24-01-2013 à 11:51:22  profilanswer
 

Ben c'est le traitement du formulaire qui prend du temps + accès à la BD puisque dans un certain nb de cas, je dois vérifier si la personne est inscrite. Si elle ne le doit plus, supprimer l'entrée. Au contraire, si elle doit l'être, créer l'entrée dans la BD.
Ca nous en fait des requêtes.  
 
Je peux peut-être récupérer toutes les inscriptions du mois d'un personne, comme ça, pas besoin de faire de vérif en BD de l'existence d'une inscription. Pour les suppressions, je peux les mettre dans un tableau et faire toutes les suppressions d'un coup.
 
Ca fera peut-être gagner un peu de temps...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2172509
tsoko
Posté le 24-01-2013 à 16:37:30  profilanswer
 

Bonjour,
Etes-vous sûr de l'optimisation du code? Pas de boucles qui viendraient freiner les performances?


---------------
Besoin d'aide pour votre projet? agence web
n°2172510
Profil sup​primé
Posté le 24-01-2013 à 16:48:08  answer
 

Tu peut pas inscrire une personne même si elle est déjà inscrite ?

n°2172555
CyberDenix
Posté le 24-01-2013 à 22:21:44  profilanswer
 

La question, c'est :
 
Où le temps est-il le plus dépensé ?
 
En MySQL ou en PHP ?
 
cf le post de czh, il faut logguer le temps de toutes les requetes MySQL et le comparer au temps total de la page en affichant le porcentage que ca représente.
 
Comme ça tu sauras exactement où concentrer tes optimisations.
 
C'est un premier step obligatoire si tu veux être efficace.


---------------
Directeur Technique (CTO)
n°2172632
rufo
Pas me confondre avec Lycos!
Posté le 25-01-2013 à 15:16:42  profilanswer
 

Ce qui prend le plus de temps, c'est la boucle sur environ 2000 entrées du formulaire. Parce que pris individuellement, une entrée du formulaire est traitée très rapidement.
 
J'ai finalement trouvé une solution : je propose le planning avec 2 types de vue, le mois et la semaine (le nb de semaines à afficher étant géré ans le fichier de conf, par ex, 2 semaines). Comme ça, en consultation, l'utilisateur peut voir tout le mois. En cas de besoin de MAJ du planning, il passe en type de vue "semaine", ce qui réduit à environ 50% la taille du formulaire. J'ai pas encore testé, mais là, devrai plus y avoir de pb.
 
Autre avantage : la fonction qui affiche désormais le planning ne prend plus en entrée le mois et l'année mais une date de début et de fin. Je peux donc même au besoin ne plus qu'afficher le planning que d'1 seul jour si vraiment j'avais encore des pbs.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2172641
rufo
Pas me confondre avec Lycos!
Posté le 25-01-2013 à 16:52:19  profilanswer
 

C'est bon, j'ai mis en prod, ça résout apparemment le pb d'avoir un formulaire plus petit à traiter :)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Pb de perfs pour traiter un planning

 

Sujets relatifs
Pb de synthaxe pr colorer cellules en boucle avec une FUNCTIONPb formulaires sur dreamweaver
Pb affichage de jimdo sous IEPb Protocole TCP[Résolu]
Pb de DLL ?Pb fonction RechercheV Excel
[WINDEV] Planning affichage des toutes les ressourcesPb avec window.setTimeout et window.close sous IE8
Création d'un planningPb d'overflow avec Firefox 14
Plus de sujets relatifs à : [Résolu] Pb de perfs pour traiter un planning


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR