Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

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

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

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

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

Обратил внимание, что при обновлении страницы с миниатюрами из фотоальбома, они каждый раз грузятся заново. Это не есть хорошо.
Предлагается следующее решение
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
Поддержка
Поддержка
Сообщения: 5270
Стаж: 19 лет 2 месяца
Откуда: Питер
Благодарил (а): 188 раз
Поблагодарили: 800 раз
Контактная информация:

Сообщение Siava »

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

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

Спасибо, за весьма полезный мод, мне вот такие мелкие оптимизации жутко необходимы :)
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
Егор Наклоняев
phpBB 2.0.4
Сообщения: 404
Стаж: 19 лет 5 месяцев
Откуда: оттуда
Контактная информация:

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

Siava

Ещё раз проверил. В IE вроде работает тоже, поскольку в HTTP заголовке картинок gzip не упоминается.
Аватара пользователя
Chemist
phpBB 1.4.2
Сообщения: 51
Стаж: 19 лет
Откуда: Москва
Контактная информация:

Сообщение Chemist »

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

Если фортуна повернулась к тебе задом... не теряйся!
Геральт
phpBB 1.0.0
Сообщения: 9
Стаж: 15 лет 10 месяцев

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

Сообщение Геральт »

спасибо. установил - работает. конфигурация : версия 22 + смартор 56 + watermark. Из за ватермарка пришлось отключить кэширование полноразмерных фото, но страницы с миниатюрами просто летают.
Iftin
phpBB 2.0.7
Сообщения: 573
Стаж: 18 лет 10 месяцев
Откуда: Moscow
Контактная информация:

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

Сообщение Iftin »

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

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

Сообщение Геральт »

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

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