Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Функция кеширования(трудно :)) (https://javascript.ru/forum/misc/32422-funkciya-keshirovaniya-trudno.html)

dmitry111 16.10.2012 22:45

Цитата:

Сообщение от dmitriymar (Сообщение 210601)
вопрос нахрена, если картинки?
1 гет аякс запросы кешируются.
2 картинки кешируются.
3 достаточно сохранять параметры запроса+адрес картинки если не гет, чтоб не делать запрос какой уже был

не это полюбому надо! Количество элементов меняется по требованию пользователя.
То есть конечное количество картинок не будет соответствовать кешу аякса.

И кстати, не все там так гладко с кешем аякса. Читал, уже не помню, давно было, но там есть какие-то подводные камни

dmitry111 16.10.2012 22:47

Цитата:

Сообщение от dmitriymar (Сообщение 210621)
melky,
а сам для чего соль добавлял в гет аякс запросы? тема неоднократно была на форуме, хотя это возможно только в ие, но хотя было и не только в нём. но в случае т.с то что он получает адреса изображений. кеширование легко организать как описано у Стефанова.

В шаблонах? Мемоизация(стр 106)? :)
уже изучаю :victory:

dmitry111 17.10.2012 17:56

реализовал кеш с помощью мемоизации и innerHTML (Nekromancer спасибо!)

var cache = {}; // тут будут храниться данные и будут доступны по ключу

// сама функция кеширования:
function save (param) {

var result = N.innerHTML;
cache[param] = result;

return cache[param]

}


На самом деле вся загвоздка была в работе с NodeList. Ну никак не получалось сохранить именно данные, а не "живое представление". Возможно, можно это решить с помощью клонирования (cloneNode). Но, думаю это гораздо более затратный процесс, в отличии от innerHTML. Хотя с точки зрения подхода, кеширование с NodeList выглядит более изящным :)

Nekromancer 17.10.2012 20:40

var cache = {}; // тут будут храниться данные и будут доступны по ключу
 
// сама функция кеширования:
function save(node, param) {
var cached = document.createDocumentFragment();
if (node.childNodes.length) {
for (var i = 0, nodes = node.childNodes, len = nodes.length; i < len; i++) {
cached.appendChild(nodes[i]);
}
}

cache[param] = cached;
 
}

function get(param) {
return param in cache ? cache[param].cloneNode(true) : null;
}


Можно ещё примерно так.

dmitry111 17.10.2012 22:03

Nekromancer,

да, спасибо! ;)


Часовой пояс GMT +3, время: 05:54.