X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )

2 страниц Открыть меню   1 2 >  
Ответить в данную темуНачать новую тему
> вопрос по кэшу img
Гость_IMMEASU[RA]BILITY_*
сообщение 2011-03-15, 16:29
Сообщение #1



Гости





как устранить проблему связанную с просмотром новости к примеру у которой прикрепленные изображения!

проблема в том что они не кэшатся! каждый раз читая новость повторно открывая страницу происходит обращение в систему для отдачи изображения!

как заставить систему работать по принципу один раз сгенел картинку системой, отдать ее в кэш браузера чтоб до следующего обновления страницы или изображения обращения на систему не происходило!?
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2011-03-15, 16:33
Сообщение #2
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


хмм... Хорошая идея на самом деле. Запишу себе для реализации в альфе.

По вопросу. Наверное самое простое - установить какой-нибудь сервер статики nginx. На RC5 такая возможность, к сожалению, не предусмотрена. Но, как сказал выше, в первой версии будет 100%.
Перейти в начало страницы
+Цитировать сообщение
Гость_IMMEASU[RA]BILITY_*
сообщение 2011-03-15, 16:39
Сообщение #3



Гости





ок буду ждать... пока поковыряюсь сам +)
Перейти в начало страницы
+Цитировать сообщение
KeSSLeR
сообщение 2011-03-16, 2:22
Сообщение #4
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 483
Регистрация: 2010-02-11
Версия системы: RC5

Репутация:   нет  
Всего: нет


Всмысле сохранить в кеше?? Браузер это должен делать по умолчанию. Ну или только у меня так)
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2011-03-16, 3:50
Сообщение #5
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


KeSSLeR, он это может делать только в случае если его попросят. Если его не просить - кэшировать он ничего не будет.
Первую версию уже научил кэшировать. Следите за обновлениями.
Перейти в начало страницы
+Цитировать сообщение
Гость_IMMEASU[RA]BILITY_*
сообщение 2011-03-16, 9:53
Сообщение #6



Гости





Цитата (Alexander @ 2024-04-18 08:36)
Первую версию уже научил кэшировать

это отлично!!!
Перейти в начало страницы
+Цитировать сообщение
Djadka
сообщение 2011-08-22, 21:49
Сообщение #7
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 463
Регистрация: 2010-10-17

Репутация:   нет  
Всего: нет


Александр как вы научили кешить картинки, интересует для РЦ5, в хеде вы там вообще отменили кешь всего чего только можно.
если учидють так

        
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
		header('Last-Modified: '.date('r',$this->MyTime()-3600));
		#header('Cache-Control: no-store, no-cache, must-revalidate');#HTTP/1.1
		#header('Cache-Control: post-check=0, pre-check=0',false);
		#header('Pragma: no-cache');#HTTP/1.0
		header('Content-Type: image/jpg');
		header('Content-Type: '.$this->content_type.'; charset='.$charset);
		header('Content-Encoding: '.($this->do_gzip_compress ? 'gzip' : 'none'));


то всё кешиться кашерно, но вопрос в другом, какие последствия это принесёт ?
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2011-08-25, 18:51
Сообщение #8
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Djadka, весь секрет кэширования картинок сокрыт в файле download.php . А в остальном, кэширование картинок ничем не отличается от кэширования прочего контента. Технология кэширования широко описана в Интернете.

Ключевые моменты:

header('Cache-Control: max-age=0, must-revalidate');
$_SERVER['HTTP_IF_MODIFIED_SINCE']
Etag
Перейти в начало страницы
+Цитировать сообщение
Loader
сообщение 2011-08-28, 15:38
Сообщение #9
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


Цитата (Alexander @ 2024-04-18 08:36)
весь секрет кэширования картинок сокрыт в файле download.php

Alexander, а Вы не могли бы и в файл download.php от RC5 внедрить такое же кэширование? :rolleyes:
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2011-08-28, 16:16
Сообщение #10
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Loader, к сожалению нет, поскольку кэширование идет намного дальше файла download.php
Перейти в начало страницы
+Цитировать сообщение
Djadka
сообщение 2011-08-28, 16:25
Сообщение #11
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 463
Регистрация: 2010-10-17

Репутация:   нет  
Всего: нет


Мой вариант что выше берёт все картинка с сайта, включая и шаблон и отсылает дружно в кеш. Загрузка сайта ощутима ускорилась
Перейти в начало страницы
+Цитировать сообщение
Loader
сообщение 2011-08-28, 18:18
Сообщение #12
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


Цитата (Djadka @ 2024-04-18 08:36)
включая и шаблон

Включая и html-страницы! Зачем это надо?
Перейти в начало страницы
+Цитировать сообщение
Djadka
сообщение 2011-08-28, 18:31
Сообщение #13
Любитель
Иконка группы

Группа: Eleanor user
Сообщений: 463
Регистрация: 2010-10-17

Репутация:   нет  
Всего: нет


Не хтмл страницы а включая картинки с шаблона что бы не было нагрузка для сервака каждый раз грузить их
Перейти в начало страницы
+Цитировать сообщение
Loader
сообщение 2011-08-28, 21:06
Сообщение #14
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


Цитата (Djadka @ 2024-04-18 08:36)
Не хтмл страницы а включая картинки с шаблона что бы не было нагрузка для сервака каждый раз грузить их

А как быть с этим участком:

Цитата
header('Content-Type: image/jpg');
header('Content-Type: '.$this->content_type.'; charset='.$charset);


Сначала хеадер Content-Type: image/jpg а потом он перезаписывается чем угодно.

Добавлено через 2 минут, 0 секунд:

Цитата (Alexander @ 2024-04-18 08:36)
Loader, к сожалению нет, поскольку кэширование идет намного дальше файла download.php

Не намного дальше на самом деле. Функцию HookOutPut() можно реализовать и прямо в файле download.php.
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2011-08-28, 21:17
Сообщение #15
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Цитата (Loader @ 2024-04-18 08:36)
Не намного дальше на самом деле. Функцию HookOutPut() можно реализовать и прямо в файле download.php.

Давайте я Вам помогу - а Вы реализуете и выложите на всеобщее благо. Сейчас у меня очень критично со временем.
Перейти в начало страницы
+Цитировать сообщение
Loader
сообщение 2011-08-28, 21:26
Сообщение #16
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


Цитата (Alexander @ 2024-04-18 08:36)
Давайте я Вам помогу - а Вы реализуете и выложите на всеобщее благо. Сейчас у меня очень критично со временем.

Да я только "ЗА"! :D
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2011-08-28, 21:43
Сообщение #17
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Окей. Попробуйте самостоятельно разобраться в заголовках. Задавайте здесь вопросы - я буду отвечать. И все у нас получится.
Перейти в начало страницы
+Цитировать сообщение
Loader
сообщение 2011-09-17, 10:09
Сообщение #18
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


Цитата (Alexander @ 2024-04-18 08:36)
Окей. Попробуйте самостоятельно разобраться в заголовках.

В общем-то разобрался, кэшируется отлично :rolleyes:
Для включения этой полезной опции нужно сделать следующее: скачать приложенный архив, заменить файл download.php в корне сайта и кое-что изменить. Во-первых скопировать текст из файла class_funtions.txt и вставить его в файл classes/class_functions.php вместо функции     public static function OutputStream($text,$filename=''), затем копируете текст из файла mainclass.txt и вставляете в файл classes/mainclass.php перед функцией public function SendHeaders($charset=ELEANOR_DISPLAYCHARSET).
Вот и всё! ;)



Сообщение отредактировал Loader - 2011-09-17, 11:04

Прикрепленные файлы
Прикрепленные файлы  Кеширование_изображений.rar ( 5.66 килобайт ) Скачиваний: 2
 
Перейти в начало страницы
+Цитировать сообщение
Loader
сообщение 2011-09-23, 19:55
Сообщение #19
Профессионал
Иконка группы

Группа: Eleanor user
Сообщений: 1 161
Регистрация: 2010-04-19

Репутация:   нет  
Всего: нет


Обновление и устранение кое-каких недочётов.
Если Вы устанавливали данный пример из предыдущего поста, то вам нужно вернуть всё в первоначальное состояние. (как было до установки)
Для установки нужно открыть файл classes/mainclass.php найти в нём строку примерно 433 с текстом:
Цитата
            foreach($this->ip_arr as &$ip)
                if(Functions::IPMatchMask($ip,$b_ip))
                    throw new EE($message,EE::BAN);
        }
    }
///Место вставки кода
    public function SendHeaders($charset=ELEANOR_DISPLAYCHARSET)
    {
        if(headers_sent())
            return;


и вставить там следующий код:

Цитата
// $last_modified - дата последней модификации документа на сервере, Unix Timestamp
// $etag = текущий ETag документа на сервере
public function NeedRefresh($last_mod,$etag)
{
if(headers_sent()) return; $refresh=true;
        
$mod_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? strtotime(preg_replace("/;.*$/", "", $_SERVER["HTTP_IF_MODIFIED_SINCE"])) : '';
$none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? trim($_SERVER['HTTP_IF_NONE_MATCH']) : '';

switch (TRUE) {
case (!$none_match && $mod_since): #Проверка только по If-Modified-Since:
if ($mod_since <= time() && is_int($mod_since) && $mod_since >= $last_mod) $refresh=false; # 304 Not Modified
break;

case ($none_match):
if ($mod_since)
{ # Проверка и по If-None-Match, и по If-Modified-Since
if ($mod_since > time() || !is_int($mod_since) || $mod_since < $last_mod)
break; # Файл в кэше клиента устарел по If-Modified-Since
}
# Проверку If-Modified-Since, если она была - прошли. Проверка по If-None-Match:
if ($etag == '') { $etag=dechex($last_mod); break; }
$INM = split('[,][ ]?', $none_match);
foreach ($INM as $enity)
if ($enity==$etag || $enity=='*') $refresh=false; # 304 Not Modified
break;
# Если после этого $refresh=true то просто отдаем страницу.(200 ОК)
}

header('ETag: '.$etag);
if ($refresh)
{
header('Last-Modified: '.gmdate('D, d M Y H:i:s ',$last_mod).'GMT');
return;
}
     header('Last-Modified: '.gmdate('D, d M Y H:i:s ',$last_mod).'GMT',true,304);
     die;
}


Далее нужно скачать приложеный архив, из которого взять файлы:
1) заменить файл download.php в корне сайта;
2) скопировать файл class_files.php в папку classes/others/ на Вашем сайте;

Всё, теперь файлы из папки uploads включая картинки кэшируются в браузере.

Сообщение отредактировал Loader - 2011-09-23, 19:57

Прикрепленные файлы
Прикрепленные файлы  Кэширование.rar ( 5.24 килобайт ) Скачиваний: 1
 
Перейти в начало страницы
+Цитировать сообщение
Alexander
сообщение 2011-09-23, 23:18
Сообщение #20
Eleanor developer
Иконка группы

Группа: Администраторы
Сообщений: 5 261
Регистрация: 2008-11-11
Из: Николаев
Версия системы: RC5

Репутация:   нет  
Всего: 67


Loader, благодарю за проделанную работу!
Перейти в начало страницы
+Цитировать сообщение

2 страниц Открыть меню   1 2 >
Ответить в данную темуНачать новую тему
0 чел. читают эту тему (гостей: 0, скрытых пользователей: 0)
Пользователей: 0

 
RSS Текстовая версия 0.0486 сек.    11 запросов    GZIP включен    Сейчас: 2024-04-18, 8:36