2011-03-03 4 views
0

Basé sur this tutoriel J'ai construit une page qui fonctionne correctement. J'ai ajouté quelques boîtes déroulantes à la page, et basé sur this snippet, ont pu filtrer les résultats en conséquence. Donc, en pratique, tout fonctionne comme il se doit. Cependant, ma question concerne l'efficacité de la procédure. En ce moment, le processus ressemble à ceci:Optimisation des performances: Google map via PHP, mySQL et Javascript

1.) utilisateurs visites Page 2.) onload() du corps est appelé 3.) Javascript appelle un script PHP, qui interroge la base de données (en fonction de critères passés le long via l'URL) et exporte cette requête vers un fichier XML. 4.) Le fichier XML est ensuite analysé via javascript sur la machine locale des utilisateurs.

Pour une recherche, il peut y avoir plusieurs milliers de résultats (et donc plusieurs milliers de marqueurs à placer sur la carte). Comme vous l'avez peut-être deviné, il faut beaucoup de temps pour placer tous les marqueurs. J'ai quelques idées pour l'accélérer, mais je voulais toucher à la base avec des utilisateurs expérimentés pour vérifier que ma logique est saine. Je suis ouvert à toutes suggestions! Idée n ° 1: Existe-t-il un moyen (et accélèrerait-il les choses?) D'exécuter la requête une fois, de générer un fichier XML via PHP contenant tous les résultats possibles, de stocker localement le fichier XML, puis de filtrer javascript? Idée n ° 2: Créez un travail cron sur le serveur pour exporter le fichier XML vers un emplacement connu. Au lieu d'utiliser «Gdownloadurl (phpfile.php», j'utiliserais gdownloadurl (xmlfile.xml). Ainsi, il ne serait plus nécessaire d'exécuter une nouvelle requête à chaque fois que l'utilisateur changerait la valeur d'une liste déroulante

Idée n ° 3: Au lieu de renvoyer les critères au fichier php (via l'URL) devrais-je juste filtrer les résultats via javascript avant de placer le marqueur sur la carte?

J'ai vu beaucoup de pages Web qui placent des tonnes et des tonnes de marqueurs sur une carte Google et il ne prend pas presque aussi longtemps que ma demande. Quelle est la pratique courante dans une telle situation?

Merci!

Edit: Il y a peut-être une faille dans ma logique: Si je devais exporter tous les résultats dans un fichier XML, comment puis-je filtrer ces résultats (autre que javascript)?

Répondre

0

Votre logique est saine, cependant, je ne ferais probablement pas le filtrage en Javascript. Si l'ordinateur de l'utilisateur n'est pas très rapide, les performances seront affectées. Il est préférable d'effectuer le filtrage côté serveur en fonction d'une ressource mise en cache (xml dans votre cas).

La base de données est probablement le plus gros goulot d'étranglement de cette opération. La mise en cache du résultat accélèrerait donc considérablement votre application. Vous pourriez également considérer que vous avez configuré vos clés correctement pour faire votre requête aussi vite que possible.

+0

J'ai fini par changer la requête de sélection pour inclure seulement les 8-10 colonnes nécessaires, par opposition à l'original select * qui se composait de plus de 300 colonnes. Ce qui a accéléré les choses de manière significative. Cependant, la question demeure, comment faire pour mettre en cache le fichier XML? devrais-je simplement exécuter un script qui enregistre le fichier dans un dossier accessible au public? Ou y a-t-il un meilleur moyen? – Edward

+0

Stockez les documents XML en dehors de la racine du document et disposez d'un script PHP qui accepte les paramètres à filtrer, et demandez à votre script PHP de sortir le document XML filtré. –

+0

En y réfléchissant, vous feriez probablement mieux de simplement stocker les versions filtrées de la requête, en fonction d'un hachage des paramètres donnés.De cette façon, vous ne subirez qu'une pénalité de performance lors de l'extraction d'une requête non mise en cache, et les requêtes suivantes pourront simplement utiliser la version mise en cache (aucun filtrage nécessaire). Après tout, 3k lignes n'est pas si significatif d'un coup de performance (mais devrait être évité si possible). –