 
			
				26.05.2015, 16:14
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 22.05.2015 
					
					
					
						Сообщений: 384
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Кеширование AJAX запросов
			 
			
		
		
		
		Всем привет! 
Можно ли как нибудь кешировать AJAX запросы, как будто скрипты и стили? 
Я имею ввиду, что если ответ поменялся - загрузить его, а если нет - брать из кеша, 
Например, при загрузке скриптов и стилей в ответ идет серверный код "304 Not Modified"(если они не поменялись), 
А если поменялись - код 200 
Можно ли сделать такое для AJAX запросов? 
Зарание спасибо    
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось KosBeg, 27.05.2015 в 17:08.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				26.05.2015, 17:46
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 23.10.2010 
					
					
					
						Сообщений: 2,718
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 Ничего там не идет с сервера. Сервер не знает что в вашем кеше навалено. Сначала браузер получает хтмл и по нему начинает запрашивать ресурсы сперва проверяя их в кеше. Тут и происходит диалог: браузер - такая картинка байт столько от числа такого-то е? Сервер: такая картинка байт столько от числа такого без изменений. Браузер бамц ее из кеша в рендер... 
 
А вы имеете ввиду не делать вообще запросов если такие же данные уже были получены. Ну так не делайте. Запоминайте по какому-то признаку запросы и что было получено с них и доставайте из переменной по тому самому ключу. 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось kostyanet, 26.05.2015 в 17:50.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				26.05.2015, 17:56
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 KosBeg, 
 можно но всё одно запрос на сервер будет: пересылка даты из кеша -- сервер отправляет ок или данные если актуальные данные имеют иную дату. 
данные+дата => JSON => localStorage 
экономия только на ответе сервера и то в случае редко изменяемых данных 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				26.05.2015, 18:09
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 22.05.2015 
					
					
					
						Сообщений: 384
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от рони
			
		
	 | 
 
	| 
		экономия только на ответе сервера и то в случае редко изменяемых данных
	 | 
 
	
 
 
	
 
	| 
		
			Сообщение от kostyanet
			
		
	 | 
 
	| 
		не делать вообще запросов если такие же данные уже были получены
	 | 
 
	
 
 я только что написал одну штучку, которая "кеширует" ответ пока жива "сесия", 
"сесия" в даном случае - это пока не закрыли вкладку, или не обновили страницу
 
var ajax_cache = {};
if(ajax_cache[url]) {
 // используем "кеш"
} else {
 // делаем аякс запрос, и "кешируем" его
 ajax_load(url); // ajax_load() - это условная функция аякс запроса, что бы не писать сюда весь код
 ajax_cache[url] = xhr.responseText;
}
PS: мне не особо подходит, но уже хоть что-то  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось KosBeg, 26.05.2015 в 18:16.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				26.05.2015, 18:23
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 23.10.2010 
					
					
					
						Сообщений: 2,718
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от рони
			
		
	 | 
 
	| 
		можно но всё одно запрос на сервер будет
	 | 
 
	
 
 Не будет, если кешировать в самом js. 
 
Браузерное кеширование включается и отключается тупо через дату ресурса и параметры всякие. Обычно на аякс вешают отключение кеширования, чтобы браузер не лез со своими услугами. Но это если мы получаем данные. А если ресурсы типа скриптов и стилей, там гавным гавно все предусмотрено. То есть берешь готовую либу и она все что было закачано уже не закачивает при повторных запросах, а просто достает из кеша.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				26.05.2015, 18:28
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 23.10.2010 
					
					
					
						Сообщений: 2,718
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от KosBeg
			
		
	 | 
 
	| 
		PS: мне не особо подходит, но уже хоть что-то
	 | 
 
	
 
 ну вот так в общем и делается. Есть еще замороченнее методы, по каким-то там алиасам еще сохраняют. Я когда искал годные лоадеры, насмотрелся на эту хренату. Мне кешировать ничего не надо было, поэтому не осталось, а вообще - дофига.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				26.05.2015, 18:40
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от kostyanet
			
		
	 | 
 
	| 
		Не будет, если кешировать в самом js.
	 | 
 
	
 
 непонимаю откуда сервер узнает есть у меня данные или нет, если об этом ему не сообщить?
 
а пока в вашем мире запроса не будет, в моём будет.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				26.05.2015, 19:03
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 23.10.2010 
					
					
					
						Сообщений: 2,718
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от рони
			
		
	 | 
 
	| 
		непонимаю откуда сервер
	 | 
 
	
 
 Харе тупить, ТС сам уже все придумал, там же очевидное решение, которое и в браузерах утилизовано.
 
Мне, кстати, кеширование не понадобилось просто потому что я проверяю связанные со всем барахлом "классы". То есть например if(typeof Foo == undefined) то подкачать Foo из файла который я указываю подкачать. Когда файл закачивается, в онлоад я делаю Foo и уже второй раз проверка не канает и таким образом оно кагбе и кешируется самопроизвольно. Ну типа lazy binding или как оно там.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				26.05.2015, 19:11
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 23.10.2010 
					
					
					
						Сообщений: 2,718
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 А, вспомнил, я целые страницы кеширую. Там короче статьи загружаются по аяксу и если юзер чота нипонял в статье, которую уже загружал и снова ее выберет, то она не с сервера загрузится, а из массива в js. Что там вообще думать-то? На клиенте памяти как гавна, даже в телефонах как гавна, а текст занимает килобайты. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				26.05.2015, 19:19
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 23.10.2010 
					
					
					
						Сообщений: 2,718
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Наврал, не статьи, а список статей, который разбит типа на страницы. Этот список и кешируется, а статьи загружаются обычным запросом, ибо чтобы загружать по аяксу нужно мудрить с 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];
	},
Как обычно написано по-быстрому в расчете потом все причесать и брошено нах, ибо и так работает.   
Это уже на другом сайте я сделал нормальную имитацию смены урла при загрузке статьи аяксом, но кешировать ничего не стал, в силу особенностей самих статей - всяки там ебауты, факи, справка и тп. то есть разнобой всякий.  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось kostyanet, 26.05.2015 в 19:21.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 
 
 
 
	 | 
 
 
 |