Bonjour,
J'ai développé une petite application de gestion des interventions en php5/mysql et je rencontre un problème avec la montée en charge de cette application.
Une intervention peut avoir une ou plusieurs actions.
Une action peut avoir un ou plusieurs technicien.
Un technicien appartient à un site d'une société.
Un site appartient à une société.
Concrètement, j'ai une classe pour chacun de ces 5 objets et dans ma base une table pour chaque objet. J'initialise un objet en lui passant un identifiant (la clé primaire), le constructeur fait un select avec l'id en paramètre et initialise les attributs de mon objet avec les résultats de la requête.
C'est super pratique car si je veux le nom de la société du site a du technicien b de l'action c de l'intervention d, ça donne:
$intervention[d]->action[c]->technicien[b]->site[a]->societe->nom
Mais voilà, lorsque j'affiche 30 interventions, chacun de mes objets génère une requete à l'initialisation. Du coup, j'arrive très vite à atteindre entre 1000 et 2000 requêtes pour l'affichage d'une page (30 interventions, 2 ou 3 actions chacune, 2 ou 3 techniciens chacune, ...) !!!
Existe-t-il des méthodes de développement (voire un framework) où, lorsqu'un objet est déjà initialisé, php rappelle l'objet instancié sans refaire la requête ?
Je n'ai qu'une trentaine de techniciens. Si le même technicien intervient sur plusieurs actions différentes, je fais ma requête pour chacune des actions où il intervient (c'est mal). Ce que j'aimerais, c'est faire la requête qu'une seule fois et ensuite, réutiliser l'objet ainsi obtenu autant de fois que nécessaire (c'est bien).
D'après mes recherches, je crois que la technique que j'utilise est du lazy loading. A mon avis, je me plante quelque part pour optimiser tout ça.
Je pensai sinon charger l'ensemble des objets au démarrage de la page mais comment savoir lesquelles j'aurai besoin ? Il est impensable de charger l'ensemble des actions par exemple (plus de 16.000 aujourd'hui après seulement 6 mois d'utilisation).
Merci pour vos réponses.
Partager