2014-07-23 5 views
0

Je fais des recherches sur la façon de mettre correctement en cache les réponses AJAX, car cela accélère une page avec beaucoup de requêtes AJAX. J'ai trouvé cette pièce sur le site Web de Yahoo:Comment mettre correctement en cache AJAX

Regardons un exemple. Un client de messagerie Web 2.0 peut utiliser Ajax pour télécharger le carnet d'adresses de l'utilisateur à des fins d'auto-complétion. Si l'utilisateur n'a pas modifié son carnet d'adresses depuis la dernière fois qu'il a utilisé l'application Web de messagerie, la réponse au carnet d'adresses précédente pouvait être lue dans le cache si cette réponse Ajax était rendue possible avec un futur en-tête Expires ou Cache-Control. Le navigateur doit être informé de l'utilisation d'une réponse de carnet d'adresses précédemment mise en cache par rapport à la demande d'un nouveau. Cela peut être fait en ajoutant un horodatage au carnet d'adresses URL Ajax indiquant la dernière fois que l'utilisateur a modifié son carnet d'adresses, par exemple, & t = 1190241612. Si le carnet d'adresses n'a pas été modifié depuis le dernier téléchargement, l'horodatage sera le même et le carnet d'adresses sera lu dans le cache du navigateur, éliminant ainsi un aller-retour HTTP supplémentaire. Si l'utilisateur a modifié son carnet d'adresses, l'horodatage garantit que la nouvelle URL ne correspond pas à la réponse mise en cache et le navigateur demande les entrées du carnet d'adresses mises à jour.

Ceci le rend seulement moins clair. La raison pour laquelle je veux tout savoir, c'est que je construis une simple page Web où les utilisateurs peuvent ajouter des raccourcis vers des sites Web. Ils voient une grille d'icônes et peuvent cliquer sur ou rechercher le site dont ils ont besoin. Ceci est seulement conçu comme un projet pour apprendre à connaître PHP et surtout AJAX beaucoup mieux; rien que les utilisateurs réels verront jamais.

Comme vous pouvez l'imaginer, la fonction de recherche ralentit beaucoup le site Web. Surtout parce qu'il effectue une requête AJAX après chaque lettre tapée. Par conséquent, je pense que cela améliorerait grandement le site web si certaines parties de celui-ci étaient cachées.

Répondre

0

Vous devez faire votre esprit d'abord:

Voulez-vous une réponse en cache utilisé, ou vous voulez que le serveur pour créer un nouveau un à chaque fois?

Ce que vous demandez exactement n'est pas clair pour moi. Que voulez-vous être mis en cache, et combien de temps?

  • Si vous voulez une réponse en cache, utilisez simplement une URL que vous avez utilisée auparavant. vous obtiendrez la réponse en cache pour une semaine http://www.example.com/myAjaxHelper.php?q=ab

    Si le serveur répond par un « à partir de maintenant une semaine » expires tête qui dit:

Par exemple (en combinaison avec un expires-tête). Votre navigateur le fera ainsi. (N'oubliez pas que vous pouvez configurer la valeur d'expiration dans les en-têtes de réponse) Des problèmes surviennent lorsque les navigateurs ne respectent PAS l'en-tête expires, et parfois ils récupèrent la version mise en cache plutôt que la nouvelle, même si elle a expiré. (Notamment plus IE avait besoin d'un peu d'en-têtes supplémentaires pour résoudre ce problème, et il est très déroutant)

  • Si vous voulez une réponse fraîche (et cela peut conduire à la lenteur parce que sur chaque des clés vous faire un aller-retour au serveur), faites une NOUVELLE URL. Ex:

    http://www.example.com/myAjaxHelper.php?q=ab?time= <? Php temps d'écho(); ?>

Cela conduira à une nouvelle URL à chaque seconde. Et celui-ci ne sera jamais mis en cache, car l'URL diffère (uniquement pour la partie time = ...., mais cela suffit pour forcer une nouvelle requête).

Questions connexes