Виктор Н.
11 повідомлень
#16 років тому
Здравствуйте. Мои знания (мой уровень интеллекта) ограничены началом HTML.
Написал яваскрипт для сайта , меняющий в случайном порядке несколько заданных картинок. Все (?) браузеры, скачав однажды картинку, в дальнейшем вытаскивают ее из кэша, по мере необходимости. Кроме Internet Explorer, который бесконечно подгружает их с сервера.

Если можно, подскажите, пожалуйста, где моя ошибка? Или придётся что-то придумывать с пакетом картинок-слоёв и как-то их по очереди скрывать-показывать?
Вот скрипт:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<SCRIPT LANGUAGE="JavaScript">
pigeons=new Array();

function DrawPigeon() { // Рисуем случайного голубя из набора
pigeonDelay = 200*(1+4*Math.random());
pigeonFrame = Math.ceil(pigeonFrames * Math.random());

if (pigeonFrame == pigeonFrames)
pigeonFrame = 0;

if (document.pigeonAnimatedImg.complete)
document.pigeonAnimatedImg.src = pigeons;
pigeonTimer = setTimeout("DrawPigeon(pigeons)", pigeonDelay);
}


function ChangePigeon(pigeonName, pigeonFramesTemp, pigeonComment) { // Загружаем следующий набор голубей
pigeonFrame=0; pigeonInsert="";
pigeonFrames=pigeonFramesTemp;
do {
pigeons="images/200810/" + pigeonName + pigeonInsert + ".jpg";
pigeonInsert += "_";
pigeonFrame++;
}
while (pigeonFrame < pigeonFrames);
document.all.tags('a').item(1).innerHTML = pigeonComment;
}
</script>

</head>

<body onUnload="clearTimeout(pigeonTimer)">
<IMG NAME="pigeonAnimatedImg" SRC="images/200810/chelcar4.jpg" BORDER="0">
<br><a>Челкар №4</a>


<SCRIPT LANGUAGE="JavaScript">
ChangePigeon('chelcar4',5,'Челкар №4');
DrawPigeon();
</SCRIPT>

</body>
</html>


И ещё второстепенный вопрос: скрипт не работает в FireFox. Есть ещё варианты, кроме "учи матчасть"? )))
Спасибо
Евгений Кашкаров
450 повідомлень
#16 років тому
Оффтопик
флэш = никаких проблем + красивые, плавные переходы
Evgenij L.
50 повідомлень
#16 років тому
Вот рабочий в фф 3.0.3 код:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<SCRIPT LANGUAGE="JavaScript">
pigeons=new Array();
var pigeonTimer;

function DrawPigeon() { // Рисуем случайного голубя из набора
pigeonDelay = 200*(1+4*Math.random());
pigeonFrame = Math.ceil(pigeonFrames * Math.random());

if (pigeonFrame == pigeonFrames)
pigeonFrame = 0;

if (document.pigeonAnimatedImg.complete)
document.pigeonAnimatedImg.src = pigeons;
pigeonTimer = setTimeout("DrawPigeon(pigeons)", pigeonDelay);
}


function ChangePigeon(pigeonName, pigeonFramesTemp, pigeonComment) { // Загружаем следующий набор голубей
pigeonFrame=0; pigeonInsert="";
pigeonFrames=pigeonFramesTemp;
do {
pigeons="http://chelcar.narod.ru/images/200810/" + pigeonName + pigeonInsert + ".jpg";
pigeonInsert += "_";
pigeonFrame++;
}
while (pigeonFrame < pigeonFrames);
//document.all.tags('a').item(1).innerHTML = pigeonComment;
document.getElementById('pig01').innerHTML = pigeonComment;
}
</script>

</head>

<body onUnload="clearTimeout(pigeonTimer)">
<IMG NAME="pigeonAnimatedImg" SRC="http://chelcar.narod.ru/images/200810/chelcar4.jpg" BORDER="0">
<br><a id="pig01">Челкар №4</a>


<SCRIPT LANGUAGE="JavaScript">
ChangePigeon('chelcar4',5,'Челкар №4');
DrawPigeon();
</SCRIPT>

</body>
</html>

жирным обозначены изменения.
при правке кода я опирался на сообщения об ошибках. фф ругался на:
1) неопределённую переменную pigeontimer;
2) non-standard document.all property.
в ие(6 сп1) у меня кеширование работает. проверьте настройки своего браузера.

ps мб, конечно, я id не в тот тег сунул, но принцип, я думаю, понятен
Виктор Н.
11 повідомлень
#16 років тому
Nitrogeniy, спасибо!
Исправил код своей странички по Вашему образцу, - и слайдшоу заработало под FireFox.

Что касается Internet Explorer, то у меня стоят настройки по умолчанию: "автоматическая" работа с кэшем. Ситуация с неустойчивым кэшированием не улучшилась даже после обновления до седьной версии браузера.

Похоже, функция document.pigeonAnimatedImg.complete некорректно работает в сочетании с оператором document.pigeonAnimatedImg.src = pigeons, - и вообще, устойчивое кэширование происходит (?) с задержкой до 200 миллисекунд.

У меня процессор 2 гигагерц и интернет 256 килобит. Вероятно, у Вас мощность процессора или/линии больше, поэтому кэширование идёт нормально. У меня на маленьких картинках или при увеличении времени показа картинки до 0,5 сек. кэш Internet Explorer тоже работает нормально. Думаю забыть об этом баге, пока кто-нибудь из посетителей сайта не напомнит )
Спасибо!
Эдуард Третьяков
269 повідомлень
#16 років тому
Цитата ("lisek"):

Что касается Internet Explorer, то у меня стоят настройки по умолчанию: "автоматическая" работа с кэшем. Ситуация с неустойчивым кэшированием не улучшилась даже после обновления до седьной версии браузера.


Если у вас стоит плагин Firebug в FF или любой другой ,который может показывать отправленные и полученные от сервера заголовки при запросе картинки - выложите их пожалуйста. Станет яснее картина с кешированием.
Виктор Н.
11 повідомлень
#16 років тому


Скачал с сайта плагин для Internet Explorer.
Заказал "слайдшоу" голубя "agaran5" (щёлкнул мышкой превьюшку). Internet Explorer должен был скачать с сервера всего две картинки: agaran5.jpg и agaran5_.jpg.

Internet Explorer скачал каждую, в среднем, по пять раз, прежде чем ему удалось их нормально закэшировать.
Хочу напомнить, что уменьшение веса картинки или увеличение паузы между сменами картинок до одной секунды устраняет этот баг. Также баг устраняется (?) путём определённого переименования картинок. Так если переименовать (пишу по памяти, точно уже не помню) картинки в 1w.jpg и 1w_.jpg, то они кэшируются мгновенно, а если в 2w.jpg и 2w_.jpg, - то только с пятой попытки. Так мне показалось в результате экспериментов. Хотя, не исключаю, что это была галлюцинация недосыпа. Но, думаю, что это результат работы искусственного интеллекта, внедрённого инженерами Microsoft во все свои продукты

А вот обмен заголовками между браузером и сервером:
Цитата:
GET /images/200810/agaran5_.jpg HTTP/1.1
Accept: */*
Referer:
Accept-Language: ru
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322)
Host: chelcar.narod.ru
Connection: Keep-Alive
Cookie: nuid=1187802401224693242

HTTP/1.0 200 OK
Date: Fri, 28 Nov 2008 04:29:30 GMT
Server: ZX_Spectrum/1997 (Sinclair_BASIC)
Last-Modified: Thu, 20 Nov 2008 18:21:55 GMT
ETag: "7dc9ae-99f3-4925aac3"
Accept-Ranges: bytes
Content-Length: 39411
Connection: close
Content-Type: image/jpeg

GET /images/200810/novatty3.jpg HTTP/1.1
Accept: */*
Referer:
Accept-Language: ru
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322)
Host: chelcar.narod.ru
Connection: Keep-Alive
Cookie: nuid=1187802401224693242

HTTP/1.0 200 OK
Date: Fri, 28 Nov 2008 04:24:25 GMT
Server: ZX_Spectrum/1997 (Sinclair_BASIC)
Last-Modified: Thu, 20 Nov 2008 18:18:49 GMT
ETag: "7dcc23-953b-4925aa09"
Accept-Ranges: bytes
Content-Length: 38203
Connection: close
Content-Type: image/jpeg

GET /images/200810/agaran5.jpg HTTP/1.1
Accept: */*
Referer:
Accept-Language: ru
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322)
Host: chelcar.narod.ru
Connection: Keep-Alive
Cookie: nuid=1187802401224693242

HTTP/1.0 200 OK
Date: Fri, 28 Nov 2008 04:29:34 GMT
Server: ZX_Spectrum/1997 (Sinclair_BASIC)
Last-Modified: Thu, 20 Nov 2008 18:21:54 GMT
ETag: "7dc9ad-9414-4925aac2"
Accept-Ranges: bytes
Content-Length: 37908
Connection: close
Content-Type: image/jpeg

GET /images/200810/agaran5.jpg HTTP/1.1
Accept: */*
Referer:
Accept-Language: ru
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322)
Host: chelcar.narod.ru
Connection: Keep-Alive
Cookie: nuid=1187802401224693242

HTTP/1.0 200 OK
Date: Fri, 28 Nov 2008 04:29:31 GMT
Server: ZX_Spectrum/1997 (Sinclair_BASIC)
Last-Modified: Thu, 20 Nov 2008 18:21:54 GMT
ETag: "7dc9ad-9414-4925aac2"
Accept-Ranges: bytes
Content-Length: 37908
Connection: close
Content-Type: image/jpeg
Evgenij L.
50 повідомлень
#16 років тому
Если не получится разобраться с кешированием браузера, то можно будет сделать буферизацию: предварительно грузить пару-тройку картинок в хиддены и потом их брать уже оттуда.