[dev] Клиентское кеширование для фотоальбома от Smartor'а

Здесь авторы постили бета-версии своих модификаций для phpBB 2.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!
Закрыто
Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Контактная информация:

[dev] Клиентское кеширование для фотоальбома от Smartor'а

Сообщение Егор Наклоняев » 03.10.2005 23:55

Обратил внимание, что при обновлении страницы с миниатюрами из фотоальбома, они каждый раз грузятся заново. Это не есть хорошо.
Предлагается следующее решение
1. Добавляем полезную функцию ExitWithHeader в файл album_mod/album_functions.php

Код: Выделить всё

function ExitWithHeader($output,$message='')
{
	global $db, $HTTP_SERVER_VARS;
	$db->sql_close();
	if(function_exists("getallheaders")) header("HTTP/1.1 $output");
	else header('Status: '.$output);
	$code=intval(substr($output,0,3));
	if(($code==200)||($code==304))
	{
	if(isset($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE'])) header("Last-Modified: ".$HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE']);
	if(isset($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH'])) header("Etag: ".$HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH']);
	}
	if(!empty($message)) {
		header ('Content-Type: text/plain');
        echo $message;
	}
	exit;
}
2. В файле album_thumbnail.php
НАЙТИ

Код: Выделить всё

if( empty($thispic) or !file_exists(ALBUM_UPLOAD_PATH . $pic_filename) )
{
	die($lang['Pic_not_exist']);
}
После оного добавить

Код: Выделить всё

       $MyETag='"'.md5($thispic['pic_thumbnail'].$thispic['pic_time']).'"';
       $MyGMTtime=gmdate("D, d M Y H:i:s", $thispic['pic_time'])." GMT";
       if(isset($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH'])&& ($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH']== $MyETag)) ExitWithHeader('304 Not Modified');
	   else if(isset($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE']) && ($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE'] == $MyGMTtime)) ExitWithHeader('304 Not Modified');
       header("Last-Modified: ".$MyGMTtime);
	   header("Etag: ".$MyETag);
3. Ну, и на закуску, делаем кэширование больших картинок
Открыть файл album_pic.php
Найти

Код: Выделить всё

	   readfile(ALBUM_UPLOAD_PATH  . $thispic['pic_filename']);

exit;
ПЕРЕД ОНЫМ ДОБАВИТЬ

Код: Выделить всё

      
       $MyETag=filectime(ALBUM_UPLOAD_PATH  . $thispic['pic_filename']);
       $MyGMTtime=gmdate("D, d M Y H:i:s", $MyETag)." GMT";
       $MyETag='"'.$MyETag.'"';
       if(isset($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH'])&& ($HTTP_SERVER_VARS['HTTP_IF_NONE_MATCH']== $MyETag)) ExitWithHeader('304 Not Modified');
	   if(isset($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE']) && ($HTTP_SERVER_VARS['HTTP_IF_MODIFIED_SINCE'] == $MyGMTtime)) ExitWithHeader('304 Not Modified');
       header("Last-Modified: ".$MyGMTtime);
	   header("Etag: ".$MyETag);
Как мод оформлять лениво, поскольку тот, кому это нужно идею поймет, а объяснять альтернативно одарённым HTTP протокол нет ни времени ни желания.

Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 4076
Зарегистрирован: 11.01.2005 14:29
Откуда: Питер
Благодарил (а): 103 раза
Поблагодарили: 419 раз
Контактная информация:

Сообщение Siava » 04.10.2005 0:37

Егор Наклоняев
Проверил... опять же, не работает в IE при включеном gzip (вот такая хитрая особенность) :lol:
В Firefox, Opera, (IE при выкл. gzip) etc всё отлично :D

Добавлено спустя 49 секунд:

Спасибо, за весьма полезный мод, мне вот такие мелкие оптимизации жутко необходимы :)
Еще одно нарушение правил и будете забанены. © Mr. Anderson
https://siava.ru/forum/ (phpbb 2.0.x, 3.1.x 3.2.x)

Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Зарегистрирован: 25.10.2004 3:27
Откуда: оттуда
Контактная информация:

Сообщение Егор Наклоняев » 04.10.2005 0:57

Siava

Ещё раз проверил. В IE вроде работает тоже, поскольку в HTTP заголовке картинок gzip не упоминается.

Аватара пользователя
Chemist
phpBB 1.4.2
Сообщения: 51
Зарегистрирован: 28.03.2005 15:45
Откуда: Москва
Контактная информация:

Сообщение Chemist » 04.10.2005 13:15

У меня не работает, причем, как я понимаю в header должен появиться "Etag:", а у меня не появляется.
Последние работы на elist.ws & motozone.ru!

Если фортуна повернулась к тебе задом... не теряйся!

Геральт
phpBB 1.0.0
Сообщения: 9
Зарегистрирован: 12.05.2008 18:21

Re: [dev] Клиентское кеширование для фотоальбома от Smartor'а

Сообщение Геральт » 07.06.2008 13:26

спасибо. установил - работает. конфигурация : версия 22 + смартор 56 + watermark. Из за ватермарка пришлось отключить кэширование полноразмерных фото, но страницы с миниатюрами просто летают.

Iftin
phpBB 2.0.7
Сообщения: 573
Зарегистрирован: 11.05.2005 19:40
Откуда: Moscow
Контактная информация:

Re: [dev] Клиентское кеширование для фотоальбома от Smartor'а

Сообщение Iftin » 13.08.2008 15:01

Геральт писал(а): Из за ватермарка пришлось отключить кэширование полноразмерных фото, но страницы с миниатюрами просто летают.
ты не стал ставить код для больших картинок?

Геральт
phpBB 1.0.0
Сообщения: 9
Зарегистрирован: 12.05.2008 18:21

Re: [dev] Клиентское кеширование для фотоальбома от Smartor'а

Сообщение Геральт » 20.08.2008 21:55

Iftin писал(а):
Геральт писал(а): Из за ватермарка пришлось отключить кэширование полноразмерных фото, но страницы с миниатюрами просто летают.
ты не стал ставить код для больших картинок?
ага. либо ватермарк либо кэширование (((((

Закрыто

Вернуться в «Бета-версии модов для phpBB 2.0.x»