JeuWeb - Crée ton jeu par navigateur
[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)

Pages : 1 2 3


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 Wink

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 :

#
<?php
/**
* Description of App_Model_Region
*
* @author jeckel
*/

class App_Model_Region extends Lib_Model_Abstract
{
/**
* List of sub regions
* @var array
*/
protected $_childs;

/**
* Load zones includes in the current zone
* @return App_Model_Region
*/
protected function _loadChilds()
{
$this->_childs = foo(); // ici, chargement de ma cascade
return $this;
} // function _loadChilds

/**
* return list of sub zones
* @return array
*/
public function getChilds()
{
if (is_null($this->_childs))
{
$this->_loadChilds(); // Le chargement n'est déclenché que lorsque j'ai besoin des données
} // if
return $this->_childs;
} // function getChilds
} // class App_Model_Region

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 Smile

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 Wink

Aaaahhh elle a refrappée...

* christouphe va acheter une corde

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é