JeuWeb - Crée ton jeu par navigateur
Cherche un plugin jQuery pour cacher les requêtes Ajax un certain temps - 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 : Cherche un plugin jQuery pour cacher les requêtes Ajax un certain temps (/showthread.php?tid=6190)



Cherche un plugin jQuery pour cacher les requêtes Ajax un certain temps - Sephi-Chan - 08-06-2012

Hello,

Je sur à la recherche d'un plugin pour jQuery qui permettrait de mettre en cache le résultat d'une requête Ajax pendant un certain temps afin d'éviter d'en refaire une.

L'idée, c'est que si je fais :


$.getJSON('users/42/vehicles.json', { cacheFor: 10000 }).done(myCallback)
$.getJSON('users/42/vehicles.json').done(myCallback)
$.getJSON('users/42/vehicles.json', { cacheFor: 10000 }).done(myCallback)

setTimeout(function(){
$.getJSON('users/42/vehicles.json').done(myCallback)
}, 11000)

Seul le premier et le dernier appel doivent effectuer la requête, la deuxième et la troisième requête utilisent la réponse de la première requête (la deuxième montre qu'il n'est pas nécessaire de rappeler l'option cacheFor, le plugin se souvient des requêtes d'après leur path).


J'avais trouvé une bonne librairie pour ce genre de chose, Amplify.js, qui s'utilise comme ceci :


// On définit une requête gardée en cache 5 minutes.
amplify.request.define('getUserVehicles', 'ajax', {
url: '/users/{id}/vehicles.json'
cache: 5 * 60 * 1000
})

// Puis on l'utilise. Notez l'interpolation d'URL.
amplify.request('getUserVehicles', { id: 42 }, myCallback)

Ainsi, si j'appelle plusieurs fois la requête, elle n'est effectuée qu'une fois et sa réponse est mise en cache (pendant 5 minutes). Les fois suivantes, le callback est exécuté instantanément avec les données mises en cache.

Cependant, il y a deux soucis avec Amplify :
  • Ça casse la cohérence de mon code avec une API qui diffère entre les appels jQuery classiques et ceux effectués avec Amplify. Je n'ai pas envie de wrapper tous mes requêtes.
  • Ça ne supporte pas le système de deferred object de jQuery. Et ça c'est chiant.


Voilà, si vous avez ça sous la main, n'hésitez pas à faire tourner, sinon il faudra que je me penche sur la question.


RE: Cherche un plugin jQuery pour cacher les requêtes Ajax un certain temps - Maks - 09-06-2012

J'ai jamais programmé de plugin jQuery, mais quelque chose comme ?



(function ($) {

var cache = {};

$.fn.getCachedJSON = function (url, duration, cb) {

var timestamp = new Date().getTime();

if (url in cache && timestamp - cache[url].timestamp < duration) {

cb(cache[url].data);

}

else {

this.getJSON(url, function (json) {

cache[url] = {

timestamp : timestamp,
data : json

};

cb(json);

});
}

return this;

};

})(jQuery);