[POO] Bonne pratique n°1: réutilisation des objets et limitation des requêtes en DB - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : [POO] Bonne pratique n°1: réutilisation des objets et limitation des requêtes en DB (/showthread.php?tid=3327) |
RE: [POO] Bonne pratique n°1: réutilisation des objets et limitation des requêtes en DB - christouphe - 15-12-2010 bon pour des & dans les prototype de fonction, on va pas s'étaler dessus. C'est pas la mort de le mettre même si sans, en PHP5, ça donne le même résultat Aaaahhh elle a refrappée... * christouphe va acheter une corde RE: [POO] Bonne pratique n°1: réutilisation des objets et limitation des requêtes en DB - Hideaki - 15-12-2010 Jeckel a écrit :Si oui, c'est intéressant en effet, mais par contre, ça ne facilite pas la génération de la carte, pour trouver les tuiles contiguë par exemple, ça me semble plus complexe, non ? Si on recharge une partie, c'est que l'on sait ce que l'on veux recharger. Si l'on souhaite avoir un type particulier de tuile, comme des tuiles contiguës à mon sens cela correspond à sous type de tuile. Jeckel a écrit :Ok, ceci te constitue donc ta map d'une manière plus "light", j'ai bon? mais on revient toujours au problème du parcours qui me semble plus complexe, non ? oui tu as bien compris mais il suffit de faire 2 boucles imbriquer même si en général il est préférable d'éviter les boucles imbriquées, ici cela prendra pas plus de temps qu'une simple itération sur l'ensemble de la liste. RE: [POO] Bonne pratique n°1: réutilisation des objets et limitation des requêtes en DB - NicoMSEvent - 15-12-2010 J'ai une requete performante pour retrouver l'info que je cherche. J'ai 20 tuiles a retrouver (autour de la position du personnage, j'utilise un masque d'une certaine forme pour me faciliter la vie). Mon total est +- 1.000.000 tuiles pour la carte complète. Le problème n'est pas ici, en une requete, j'ai toutes mes tuiles. Une seconde requete me retourne tous les types de tuiles que je charge en mémoire, comme Jekel l'a suggéré. Je suis en PHP 5 (version OVH), je vais refaire mes tests, pour être certain du comportement que j'ai énoncé dans mon message précédent. Un de mes problèmes est que quand je charge un PNJ, automatiquement la liste des quêtes qu'il propose est chargée aussi (même si je ne suis pas sur la même case que lui). Je vais essayer de faire pareil à ton histoire de logements (2 objets différents, un light et un full, ça devrait le faire) Il ne me reste plus qu'a mettre dans une table de log les différentes requetes exécutées pour charger une page, et analyser la redondance, et repérer les endroit où ça tourne fou ^^ Pour les boucles imbriquées, j'éviterais... avec une carte de 2500x2000 (divisé par deux du au fait que j'utilise un système de case hexagonal)-> +-1.000.000 d'occurence :p RE: [POO] Bonne pratique n°1: réutilisation des objets et limitation des requêtes en DB - Jeckel - 15-12-2010 (15-12-2010, 03:34 PM)NicoMSEvent a écrit : J'ai une requete performante pour retrouver l'info que je cherche. J'ai 20 tuiles a retrouver (autour de la position du personnage, j'utilise un masque d'une certaine forme pour me faciliter la vie). Mon total est +- 1.000.000 tuiles pour la carte complète. Le problème n'est pas ici, en une requete, j'ai toutes mes tuiles. Ah ! je n'avais pas compris que tu chargeais les tuiles autour du personnage... je pensais qu'il s'agissait de groupe définis, en arrivant au bout, tu passais au groupe suivant. Effectivement, comme ça, une mise en cache est plus délicate (mais pas impossible). Si ton problème est déjà identifié au niveau du chargement d'un PNJ, et du chargement en cascade, soit, tu reprends la solution de mon histoire de logement, soit (plus intelligent, mais pas forcément plus facile) vérifier déjà que si tu charges le PNJ seul (dans une page de test) il charge ou non toutes les quêtes qui vont avec, et ensuite trouver un moyen de conditionner le chargement des quêtes lorsque tu en a vraiment besoin... J'ai un bout de code comme ça, je le retrouve et je le donne ici... Voilà comment je fonctionne en temps normale pour conditionner le chargement en cascade :
A partir de ça, tu peux rajouter une fonction qui initialise la propriété _childs ... dés qu'elle est différente de null le chargement se retrouve désactivé RE: [POO] Bonne pratique n°1: réutilisation des objets et limitation des requêtes en DB - Hideaki - 15-12-2010 Citation :Un de mes problèmes est que quand je charge un PNJ, automatiquement la liste des quêtes qu'il propose est chargée aussi (même si je ne suis pas sur la même case que lui). Je vais essayer de faire pareil à ton histoire de logements (2 objets différents, un light et un full, ça devrait le faire) Idem je n'avais pas compris Il y a cette solution sans doute plus saine ou encore tu peux faire un test entre les coordonnées de ton personnage et ton PNJ RE: [POO] Bonne pratique n°1: réutilisation des objets et limitation des requêtes en DB - NicoMSEvent - 15-12-2010 @Hideaki : Je vais adopter la solution de Jeckel, car dans la partie admin, les PNJ ne se trouvent pas forcément sur la même case, et je souhaite quand même avoir accès a toutes leurs infos. C'est fou ce qu'on peut découvrir d'un point de vue conceptuel, juste en voyant des morceaux de programme ou des idées d'autres programmeurs! Ca aura été un des échange les plus riches que j'ai eu depuis longtemps Je vous tiens au courant de mes avancées RE: [POO] Bonne pratique n°1: réutilisation des objets et limitation des requêtes en DB - niahoo - 15-12-2010 (15-12-2010, 03:18 PM)christouphe a écrit : bon pour des & dans les prototype de fonction, on va pas s'étaler dessus. C'est pas la mort de le mettre même si sans, en PHP5, ça donne le même résultat certes mais contre toute attente il se trouve que le monsieur est finalement en PHP 5. Et donc, savoir que les objets sont toujours des références te permet d'éviter des erreurs de conception ou de gagner du temps. (Pour info en PHP5 les variables qui désignent des objets ne pointent pas vers une zone de la mémoire ou est située l'objet, mais vers une zone de la mémoire ou est situé un identifiant qui, lui, pointe vers les données de l'objet proprement dites – oui je sais je l'étale, mais de faire un passage par référence constitue une étape supplémentaire à l'exécution parfaitement inutile) D'avoir fait cette erreur, ce n'est pas la mort en effet, mais de se dire que « boaf, tant que ça marche, osef » c'est moins encourageant. Nico en gros tu vas devoir revoir un peu toute l'architecture, pour savoir pourquoi au chargement d'un PNJ toutes ses quêtes sont aussi chargées. Alors qu'il suffirait de les charger uniquement lorsqu'on souhaite interagir avec elles. RE: [POO] Bonne pratique n°1: réutilisation des objets et limitation des requêtes en DB - srm - 15-12-2010 Et pour la suite parle d'un iterator lors de la lecture des données si tu veux avoir une classe/surcouche à PDO pour divers traitement. RE: [POO] Bonne pratique n°1: réutilisation des objets et limitation des requêtes en DB - NicoMSEvent - 16-12-2010 RE: [POO] Bonne pratique n°1: réutilisation des objets et limitation des requêtes en DB - Ter Rowan - 16-12-2010 tu te trompes dans l'analyse Nico (enfin je pense) De ce que je sais et ai expérimenté de php5, les objets (et uniquement les objets) sont passés en référence là tu testes avec un entier prend l'exemple ou test est un objet du type class toto { $v =0; function inc() // au lieu du ++ { $this->v++; } } tu devrais voir que partout il n'y a qu'un seul objet "test" qui est manipulé |