Я создал авторский инструмент для физики JS:
Абсолютно:
https://googledrive.com/host/0B8yu2s4Q9YD8OG00WElPQllYTW8/Home.htm
Инструмент реализован с эффектом "смены цвета" и "мыши" на кнопках изображения.
Код:
$('input#b1').bind('mouseover', function() {
$('input#b1').attr("src", "images/Begin_hover.png");
});
$('input#b1').bind('mouseout', function() {
$('input#b1').attr("src", "images/Begin.png");
Это работает отлично на месте. Но на Google Диске это занимает некоторое время.
Каково решение?
GitHub:
Это не столько проблема с вашим кодом, сколько ваше кэширование изображения (или его отсутствие) -
cache-control: private, max-age = 20
дата: вс, 05 янв 2014 09:34:29 GMT
Истекает: Вс, 05 Янв. 2014 09:34:29 GMT
Последнее изменение: Сб, 04 Янв. 2014 10:16:26 GMT
Расположение:/хост/0B8yu2s4Q9YD8OG00WElPQllYTW8/изображения/
Сервер: GSE
статус: 304 Не изменено
Атрибут max-age находится в секундах, а значение expires указывает браузеру не кэшировать его вообще.
В результате "условное GET" делается для каждого мыши и мыши в браузере, чтобы увидеть, изменилось ли изображение. Это занимает 301 мс для меня по разумному фиксированному сетевому соединению - латентность будет значительно выше в мобильных сетях.
Установите долгосрочное истечение (абсолютный минимум в час), чтобы избежать повторной выборки изображения.
Какую версию jQuery вы используете? .on() был предпочтительным методом привязки событий с jQuery версии 1.7 - вы также могли бы сделать ваш код незначительно более эффективным, сохранив элемент DOM в качестве переменной, чтобы избежать повторного поиска.
var $beginButton = $('input#b1');
$beginButton.on('mouseover', function() {
$(this).attr("src", "images/Begin_hover.png");
});
$beginButton.on('mouseout', function() {
$(this).attr("src", "images/Begin.png");