En terme de performance, si ta collection de type de tuile ne dépasse pas la centaine d'élément, et que tes objets types de tuiles sont des objets simples et des feuilles (c'est à dire qu'ils ne contiennent pas d'autres objets) ta solution de tout chargé dans un tableau me semble bonne... une seule requête de chargement, et une variable un peu grosse mais encore tout à fait gérable pour du PHP.
Ce qui m'inquiète par contre, c'est qu'à te lire, (l'histoire du passage par référence) j'ai l'impression que tu es encore en PHP4... si c'est le cas, passe rapidement en PHP5, tu y gagneras beaucoup, surtout au niveau de la gestion de la mémoire pour les objets (le point fort de PHP5).
Bref, je ne pense pas que le problème se situe au niveau de ta gestion des "types de tuiles", mais peut-être plutôt au niveau de la gestion des cartes complètes...
Si je lit bien, tu reconstruis la carte (avec sa vingtaine de tuile) régulièrement... il faudrait, je pense, que tu trouve un moyen de dédoubler ta carte en deux parties, une partie qui ne bouge pas (les tuiles et leur types) et une partie qui bouge (les personnages et objets).
La partie fixe, une fois l'objet (et toute sa structure) construit il faudrait que tu le stocke dans un fichier de cache (un petit serialize par exemple pour aplatir l'objet)... aux appels suivants, tu recharges l'objet depuis le fichier (unserialize) et hop, tu retrouve ton objet et toutes ses tuiles...
Pour aller plus loin, en PHP5 tu as les méthodes __sleep() et __wakeup() qui sont appelée lors d'un serialize et d'un unserialize, très pratique pour n'enregistrer que les données "fixes".
Une autre chose, je suppose que tu utilises les mêmes objets lorsque tu travailles sur une tuile (administration) et sur une carte complète (collection de tuiles) ? Parfois, il peut être utile d'utiliser des objets différents, plus léger lorsqu'ils sont traité en masse, pour économiser des ressources.
Je donne un exemple que j'ai vu sur une application immobilière :
Dans la base de donnée, tu as des résidences, et pour chaque résidences plusieurs logements. L'objet résidence contient la liste des logements.
A l'affichage du détails d'une résidence, tu as la liste des logements affichés... logique... Code objet, lorsque tu charges un objet "résidence", celui-ci charge ensuite la collection "logements" liés à la résidence.
Dans le moteur de recherche, on peut rechercher par type de logement (une pièce, deux pièces) mais dans le résultat on ne voit que la résidence, et le nombre de logement (une liste). Coté objet, la recherche renvoyait une liste de résidence, puis à l'affichage, pour chaque résidence, ils chargent la liste des logements, pour en resortir ensuite le nombre...
Résultat des courses : 1 requête pour la recherche, puis 1 requête par résidence affichée (pour avoir le nombre de logement) c'est un cas typique de programmation objet.
La solution : faire un objet spécifique pour le résultat de cette recherche, plus simple, et une requête SQL plus élaborée qui retourne en même temps, le nombre de logement... une seule requête, et un objet plus simple qui ne contient que les données affichées dans la liste.
Voilà, j'espère avoir été clair...
Hmm... je ne sais pas de quel langage il s'agit, mais je crois que Nico est en PHP (4 à mon avis) et ce que tu donnes... ce n'est pas du PHP il me semble...
Ce qui m'inquiète par contre, c'est qu'à te lire, (l'histoire du passage par référence) j'ai l'impression que tu es encore en PHP4... si c'est le cas, passe rapidement en PHP5, tu y gagneras beaucoup, surtout au niveau de la gestion de la mémoire pour les objets (le point fort de PHP5).
Bref, je ne pense pas que le problème se situe au niveau de ta gestion des "types de tuiles", mais peut-être plutôt au niveau de la gestion des cartes complètes...
Si je lit bien, tu reconstruis la carte (avec sa vingtaine de tuile) régulièrement... il faudrait, je pense, que tu trouve un moyen de dédoubler ta carte en deux parties, une partie qui ne bouge pas (les tuiles et leur types) et une partie qui bouge (les personnages et objets).
La partie fixe, une fois l'objet (et toute sa structure) construit il faudrait que tu le stocke dans un fichier de cache (un petit serialize par exemple pour aplatir l'objet)... aux appels suivants, tu recharges l'objet depuis le fichier (unserialize) et hop, tu retrouve ton objet et toutes ses tuiles...
Pour aller plus loin, en PHP5 tu as les méthodes __sleep() et __wakeup() qui sont appelée lors d'un serialize et d'un unserialize, très pratique pour n'enregistrer que les données "fixes".
Une autre chose, je suppose que tu utilises les mêmes objets lorsque tu travailles sur une tuile (administration) et sur une carte complète (collection de tuiles) ? Parfois, il peut être utile d'utiliser des objets différents, plus léger lorsqu'ils sont traité en masse, pour économiser des ressources.
Je donne un exemple que j'ai vu sur une application immobilière :
Dans la base de donnée, tu as des résidences, et pour chaque résidences plusieurs logements. L'objet résidence contient la liste des logements.
A l'affichage du détails d'une résidence, tu as la liste des logements affichés... logique... Code objet, lorsque tu charges un objet "résidence", celui-ci charge ensuite la collection "logements" liés à la résidence.
Dans le moteur de recherche, on peut rechercher par type de logement (une pièce, deux pièces) mais dans le résultat on ne voit que la résidence, et le nombre de logement (une liste). Coté objet, la recherche renvoyait une liste de résidence, puis à l'affichage, pour chaque résidence, ils chargent la liste des logements, pour en resortir ensuite le nombre...
Résultat des courses : 1 requête pour la recherche, puis 1 requête par résidence affichée (pour avoir le nombre de logement) c'est un cas typique de programmation objet.
La solution : faire un objet spécifique pour le résultat de cette recherche, plus simple, et une requête SQL plus élaborée qui retourne en même temps, le nombre de logement... une seule requête, et un objet plus simple qui ne contient que les données affichées dans la liste.
Voilà, j'espère avoir été clair...
(15-12-2010, 02:39 PM)Hideaki a écrit : List tuiles1 = { Coord1, ..., CoordX}
Groupe_Tuile gt = new(Type_tuile, liste_coordonnée)
Hmm... je ne sais pas de quel langage il s'agit, mais je crois que Nico est en PHP (4 à mon avis) et ce que tu donnes... ce n'est pas du PHP il me semble...