Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.10.2013, 16:05
Новичок на форуме
Отправить личное сообщение для buhpro Посмотреть профиль Найти все сообщения от buhpro
 
Регистрация: 02.10.2013
Сообщений: 2

JS загружает изображение всегда с локального кэша - почему?
В общем для экономии трафика изображения возвращаю через ПХП. В заголовке возвращаю Last-Modified: со временем файла изображения, затем анализирую параметр при следующем обращении "If-Modified-Since" и если их время одинаково - то возвращаю код 304.
Если изображение загружается в HTML - то все ок. Т.е. первый раз изображение грузится с кодом 200, а затем (если файл не изменился) с кодом 304.
Если же изображение загружается из JS - то в первый раз код 200, а в последующие ВСЕГДА код 200 и сообщение что браузер берет его из локального кэша - т.е. изображение застревает в кэше браузера навечно.
Как заставить JS обращаться к серверу при последующих вызовах а не брать все из локального кэша ???

Вот пример корректной работы из HTML

<img src="/pages/list_foto.php?foto=../foto/avtoisgermanii.jpg&size=80">



А вот неправильной работы из JS:

pic1 = new Image();

pic1.src = '/pages/list_foto.php?foto=../foto/avtoisgermanii.jpg&size=200';

//		$('<img src="' + src + '">').appendTo('.full');


Если IMG в HTML - то браузер действует так: В первый раз запрашивает изображение с сервера и кэширует его, в последующие разы делает запрос на сервер с пар-ром If-Modified-Since, в котором указывает время создания файла из своего кэша и если получает с сервера код 304 - то изображение берется с локального кэша.

Если IMG добавляется из JS - то браузер в первый раз запрашивает изображение с сервера и кэширует его, а в последующие разы на сервер вообще не обращается а ВСЕГДА берет изображение из кэша.

Почему ????????
Ответить с цитированием
  #2 (permalink)  
Старый 02.10.2013, 17:05
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

var pic1 = new Image();
pic1.src = '/pages/list_foto.php?foto=../foto/avtoisgermanii.jpg&size=200&hash=' + Math.random(0,9999999);
$('.full').append(pic);


Должно сработать.
Ответить с цитированием
  #3 (permalink)  
Старый 02.10.2013, 17:21
Новичок на форуме
Отправить личное сообщение для buhpro Посмотреть профиль Найти все сообщения от buhpro
 
Регистрация: 02.10.2013
Сообщений: 2

Сообщение от Ruslan_xDD Посмотреть сообщение
var pic1 = new Image();
pic1.src = '/pages/list_foto.php?foto=../foto/avtoisgermanii.jpg&size=200&hash=' + Math.random(0,9999999);
$('.full').append(pic);


Должно сработать.
Так это не выход - так вообще отключается кэширование изображения и сервер вообще упадет.
Выходит - хотите малую нагрузку на сервер - то навсегда забудьте о JS, Ajax, а используйте HTML + PHP.
А кто делает наполнение из JS - все отключают кэш таким вот образом
Ответить с цитированием
  #4 (permalink)  
Старый 02.10.2013, 20:49
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от buhpro Посмотреть сообщение
Так это не выход - так вообще отключается кэширование изображения и сервер вообще упадет.
Выходит - хотите малую нагрузку на сервер - то навсегда забудьте о JS, Ajax, а используйте HTML + PHP.
А кто делает наполнение из JS - все отключают кэш таким вот образом
Дык вы с сервера отсылайте изо таким макаром
<img src="/pages/list_foto.php?foto=../foto/avtoisgermanii.jpg?1380732233">
Cинее - время последнего изменения картинки

Тогда(Если стирать предыдущее изо,) и загрузка с Js - будет давать ошибку
pic1.src = '/pages/list_foto.php?foto=../foto/avtoisgermanii.jpg?1380732233'


по ошибке грузите чисто
pic1.src = '/pages/list_foto.php?foto=../foto/avtoisgermanii.jpg';

Последний раз редактировалось Deff, 03.10.2013 в 00:10.
Ответить с цитированием
  #5 (permalink)  
Старый 02.10.2013, 21:01
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Выставлены ли заголовки Cache-Control и Expires? Другие заголовки, причастные к кэшированию?
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JS библотека которая умеет генерировать растровое изображение 2r1st Библиотеки/Тулкиты/Фреймворки 1 23.07.2013 13:28
Почему на элемены импортированные с помощью .load функции JS не действуют? Vladjiss jQuery 6 23.06.2013 05:02
js смена изображение на время. (по клику) stanislavmart Элементы интерфейса 4 06.12.2012 18:04
Почему это работает? (инклуд JS в JS) Василий Б. Общие вопросы Javascript 4 11.06.2010 12:41
загрузка данных из XML, почему загружает только в Explorer asked86 AJAX и COMET 2 18.12.2009 16:29