Как реализовать кэш для Ajax-запросов

У меня есть простое приложение, которое показывает список многих элементов, где пользователь может отображать детали для каждого элемента, полученного с помощью Ajax.

Однако, если пользователь закрывает деталь и снова открывает, приложение делает еще один Ajax-запрос, чтобы снова получить тот же контент.

Есть ли какое-либо простое решение, как предотвратить это путем кэширования запросов на клиенте, поэтому, когда пользователь снова отображает ту же информацию, содержимое будет загружаться из кеша. Предпочтительно использовать jQuery.

Я думаю, что это можно решить с помощью прокси-объекта, который будет хранить запрос, когда он будет сделан в первый раз, и когда запрос будет сделан снова, прокси просто вернет предыдущий результат, не делая другого запроса Ajax.

Но я ищу какое-то более простое решение, где мне не придется реализовывать все это самому.


person Jakub Arnold    schedule 02.04.2009    source источник


Ответы (4)


Взгляните на эти плагины jQuery:

Пример jQache:

// [OPTIONAL] Set the max cached item number, for example 20
$.jCache.maxSize = 20; 
// Start playing around with it:
// Put an item into cache:
$.jCache.setItem(theKey, theValue);
// Retrieve an item from cache:
var theValue = $.jCache.getItem(theKey);
// Clear the cache (well, I think most of us don't need this case):
$.jCache.clear();
person Konstantin Tarkus    schedule 02.04.2009

IMHO самый простой способ - создать глобальный массив:

var desc_cache=[];

а затем создайте такую ​​функцию:

function getDesc(item){
if(desc_cache[item]) return desc_cache[item] else $.ajax(...);
}

После получения данных ajax сохраните результаты в desc_cache.

person Thinker    schedule 02.04.2009
comment
Согласованный. Зачем загружать еще один плагин, когда очевидно, что Javascript может делать все, что вам нужно? - person MikeMurko; 09.05.2012

Еще один плагин кеша jQuery, где вы можете установить срок действия и зависимости для объектов:

http://plugins.jquery.com/project/jCacher

Пример кода jCacher:

$(document).ready(function() {

    $.jCacher.add("key", "value");

});

$(document).ready(function() {

    var cacheItem = $.jCacher.get("key");
    alert(cacheItem.value + " was retrieved from the cache");

});
person Andreas B    schedule 22.03.2010

Вы можете создать один или два класса, чтобы инкапсулировать тот факт, что вы кэшируете; затем вы можете использовать либо AJAX, либо кеш взаимозаменяемо. См. здесь: http://myok12.wordpress.com/2011/08/19/building-an-almighty-data-retrieval-system-for-all-html5-webapps/

person Ohad Kravchick    schedule 19.08.2011