08-06-2012, 01:30 PM
(Modification du message : 08-06-2012, 01:31 PM par Sephi-Chan.)
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 :
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
J'avais trouvé une bonne librairie pour ce genre de chose, Amplify.js, qui s'utilise comme ceci :
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 :
Voilà, si vous avez ça sous la main, n'hésitez pas à faire tourner, sinon il faudra que je me penche sur la question.
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.