Помощник
Здравствуйте, гость ( Вход | Регистрация )
вопрос по кэшу img |
Гость_IMMEASU[RA]BILITY_* |
2011-03-15, 16:29
Сообщение
#1
|
|
Гости |
как устранить проблему связанную с просмотром новости к примеру у которой прикрепленные изображения!
проблема в том что они не кэшатся! каждый раз читая новость повторно открывая страницу происходит обращение в систему для отдачи изображения! как заставить систему работать по принципу один раз сгенел картинку системой, отдать ее в кэш браузера чтоб до следующего обновления страницы или изображения обращения на систему не происходило!? |
|
|
||
Alexander |
2011-03-15, 16:33
Сообщение
#2
|
|
Eleanor developer Группа: Администраторы Сообщений: 5 262 Регистрация: 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 262 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: нет Всего: 67 |
KeSSLeR, он это может делать только в случае если его попросят. Если его не просить - кэшировать он ничего не будет.
Первую версию уже научил кэшировать. Следите за обновлениями. |
|
|
||
Гость_IMMEASU[RA]BILITY_* |
2011-03-16, 9:53
Сообщение
#6
|
|
Гости |
|
|
|
||
Djadka |
2011-08-22, 21:49
Сообщение
#7
|
|
Любитель Группа: Eleanor user Сообщений: 463 Регистрация: 2010-10-17 Репутация: нет Всего: нет |
Александр как вы научили кешить картинки, интересует для РЦ5, в хеде вы там вообще отменили кешь всего чего только можно.
если учидють так
то всё кешиться кашерно, но вопрос в другом, какие последствия это принесёт ? |
|
|
||
Alexander |
2011-08-25, 18:51
Сообщение
#8
|
|
Eleanor developer Группа: Администраторы Сообщений: 5 262 Регистрация: 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, а Вы не могли бы и в файл download.php от RC5 внедрить такое же кэширование? |
|
|
||
Alexander |
2011-08-28, 16:16
Сообщение
#10
|
|
Eleanor developer Группа: Администраторы Сообщений: 5 262 Регистрация: 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 |
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 Репутация: нет Всего: нет |
А как быть с этим участком: Цитата header('Content-Type: image/jpg'); header('Content-Type: '.$this->content_type.'; charset='.$charset); Сначала хеадер Content-Type: image/jpg а потом он перезаписывается чем угодно. Добавлено через 2 минут, 0 секунд: Не намного дальше на самом деле. Функцию HookOutPut() можно реализовать и прямо в файле download.php. |
|
|
||
Alexander |
2011-08-28, 21:17
Сообщение
#15
|
|
Eleanor developer Группа: Администраторы Сообщений: 5 262 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: нет Всего: 67 |
Давайте я Вам помогу - а Вы реализуете и выложите на всеобщее благо. Сейчас у меня очень критично со временем. |
|
|
||
Loader |
2011-08-28, 21:26
Сообщение
#16
|
|
Профессионал Группа: Eleanor user Сообщений: 1 161 Регистрация: 2010-04-19 Репутация: нет Всего: нет |
Да я только "ЗА"! |
|
|
||
Alexander |
2011-08-28, 21:43
Сообщение
#17
|
|
Eleanor developer Группа: Администраторы Сообщений: 5 262 Регистрация: 2008-11-11 Из: Николаев Версия системы: RC5 Репутация: нет Всего: 67 |
Окей. Попробуйте самостоятельно разобраться в заголовках. Задавайте здесь вопросы - я буду отвечать. И все у нас получится.
|
|
|
||
Loader |
2011-09-17, 10:09
Сообщение
#18
|
|
Профессионал Группа: Eleanor user Сообщений: 1 161 Регистрация: 2010-04-19 Репутация: нет Всего: нет |
В общем-то разобрался, кэшируется отлично Для включения этой полезной опции нужно сделать следующее: скачать приложенный архив, заменить файл 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
Прикрепленные файлы
|
|
|
||
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
Прикрепленные файлы
|
|
|
||
Текстовая версия | 0.0573 сек. 12 запросов GZIP включен Сейчас: 2024-09-21, 21:23 |