16-08-2011, 02:32 PM
(16-08-2011, 02:00 PM)Sephi-Chan a écrit : Tu dois de toute façon faire le calcul des 2 côtés. Côté client pour que ce soit sympa pour l'utilisateur, puis côté serveur pour vérifier que le déplacement est bien possible.
Après, tu peux mémoriser les chemins (généralement dans un système de stockage par clé/valeur en RAM genre Memcache ou Redis). Exemple :
paris = City.find_by_name("Paris")
nimes = City.find_by_name("Nîmes")
key = [ "path", paris, nimes ]
path = Rails.cache.fetch(key) { paris.path_to(nimes) }
Si la clé n'existe pas, on exécute le code fourni dans le block et on le range dans le cache.
Après, tu peux peut-être transmettre les chemins précalculés à Javascript en les passant sous forme d'un objet JSON. Ça lui évitera le calcul dans bien des cas et ça finira d'ailleurs par couvrir 100% des calculs si ta map ne change pas.