Кеширование AJAX запросов
Всем привет!
Можно ли как нибудь кешировать AJAX запросы, как будто скрипты и стили? Я имею ввиду, что если ответ поменялся - загрузить его, а если нет - брать из кеша, Например, при загрузке скриптов и стилей в ответ идет серверный код "304 Not Modified"(если они не поменялись), А если поменялись - код 200 Можно ли сделать такое для AJAX запросов? Зарание спасибо :yes: |
Ничего там не идет с сервера. Сервер не знает что в вашем кеше навалено. Сначала браузер получает хтмл и по нему начинает запрашивать ресурсы сперва проверяя их в кеше. Тут и происходит диалог: браузер - такая картинка байт столько от числа такого-то е? Сервер: такая картинка байт столько от числа такого без изменений. Браузер бамц ее из кеша в рендер...
А вы имеете ввиду не делать вообще запросов если такие же данные уже были получены. Ну так не делайте. Запоминайте по какому-то признаку запросы и что было получено с них и доставайте из переменной по тому самому ключу. |
KosBeg,
можно но всё одно запрос на сервер будет: пересылка даты из кеша -- сервер отправляет ок или данные если актуальные данные имеют иную дату. данные+дата => JSON => localStorage экономия только на ответе сервера и то в случае редко изменяемых данных |
Цитата:
Цитата:
"сесия" в даном случае - это пока не закрыли вкладку, или не обновили страницу var ajax_cache = {}; if(ajax_cache[url]) { // используем "кеш" } else { // делаем аякс запрос, и "кешируем" его ajax_load(url); // ajax_load() - это условная функция аякс запроса, что бы не писать сюда весь код ajax_cache[url] = xhr.responseText; } PS: мне не особо подходит, но уже хоть что-то |
Цитата:
Браузерное кеширование включается и отключается тупо через дату ресурса и параметры всякие. Обычно на аякс вешают отключение кеширования, чтобы браузер не лез со своими услугами. Но это если мы получаем данные. А если ресурсы типа скриптов и стилей, там гавным гавно все предусмотрено. То есть берешь готовую либу и она все что было закачано уже не закачивает при повторных запросах, а просто достает из кеша. |
Цитата:
|
Цитата:
а пока в вашем мире запроса не будет, в моём будет. |
Цитата:
Мне, кстати, кеширование не понадобилось просто потому что я проверяю связанные со всем барахлом "классы". То есть например if(typeof Foo == undefined) то подкачать Foo из файла который я указываю подкачать. Когда файл закачивается, в онлоад я делаю Foo и уже второй раз проверка не канает и таким образом оно кагбе и кешируется самопроизвольно. Ну типа lazy binding или как оно там. |
А, вспомнил, я целые страницы кеширую. Там короче статьи загружаются по аяксу и если юзер чота нипонял в статье, которую уже загружал и снова ее выберет, то она не с сервера загрузится, а из массива в js. Что там вообще думать-то? На клиенте памяти как гавна, даже в телефонах как гавна, а текст занимает килобайты.
|
Наврал, не статьи, а список статей, который разбит типа на страницы. Этот список и кешируется, а статьи загружаются обычным запросом, ибо чтобы загружать по аяксу нужно мудрить с history, гемор.
load=function(e){ if(loading) return; page=Math.max(1,page+(this.id.match(/next/)?1:-1)); if(typeof pages[page]===U) { loading=true; send_get(location.href+'?page='+page,function(e){ loading=false; if(e.responseText.length>1) { var data=JSON.parse(e.responseText); pages[page-1]=side_cont.innerHTML; side_cont.innerHTML=data.innerHTML; } else stop(); }); } else side_cont.innerHTML=pages[page]; }, Как обычно написано по-быстрому в расчете потом все причесать и брошено нах, ибо и так работает. :) Это уже на другом сайте я сделал нормальную имитацию смены урла при загрузке статьи аяксом, но кешировать ничего не стал, в силу особенностей самих статей - всяки там ебауты, факи, справка и тп. то есть разнобой всякий. |
Часовой пояс GMT +3, время: 17:31. |