Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Кєширование GD изображений на стороне клиента
Форумы портала PHP.SU » » Графика в PHP » Кєширование GD изображений на стороне клиента

Страниц (1): [1]
 

1. byfahrenheit - 19 Июля, 2011 - 18:41:10 - перейти к сообщению
Здравствуйте. Есть динамические GD изображения (баннеры, которые позже будут использоваться в подписи на форуме).
Но при каждой загрузке данного изображения, следует запрос на сервер, на котором выполняется скрипт, после чего выводится изображения. Следственно помимо нагрузки на сервер, само изображение достаточно долго грузится.
Видел аналогичные скрипты, но изображение грузится долго только при первой загрузке. Пришел к выводу что там стоит кэширование на стороне клиента.
В итоге - надо прикрутить к своему скрипту возможность кэширование на стороне клиента, с обновлением каждых несколько часов.
Реально такое сделать?
Заранее благодарю за ответ.
2. grefon - 19 Июля, 2011 - 19:28:48 - перейти к сообщению
Кеширование стоит не на стороне клиента а на стороне сервера. Я такое делал для скриншотов сайтов и подобной тематики. В скрипт нужно вставить проверку на существование файла изображения. Если файл существует, то выводим его пользователю. Если файла нет, то запускаем скрипт создания изображения, после его создания сохраняем результат в файл и выводим этот результат пользователю.
3. byfahrenheit - 19 Июля, 2011 - 20:31:59 - перейти к сообщению
Делал так, но все равно картинка грузится относительно долго, в сравнении с подобными скриптами. Тут именно фишка в том, что браузер должен сам закэшировать ее, и обновлять через определенный промежуток времени
4. LIME - 19 Июля, 2011 - 20:46:35 - перейти к сообщению
byfahrenheit браузер кэширует по умолчанию, а указать время актуальности
можно через заголовок Cache-control
http://htmlweb[dot]ru/other/http_headers.php
5. byfahrenheit - 19 Июля, 2011 - 20:59:01 - перейти к сообщению
Беру например этот пример:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. // Кеширование локальными клиентами и использование в течение 1 часа
  3. header("cache-control: private, max-age = 3600");
  4. echo "<h1>", date("H:i:s"), "</h1>";
  5. ?>

насколько я понял, он должен закэшировать текущее время на 1 час. В результате после обновления страницы - время обновляется....
6. grefon - 19 Июля, 2011 - 21:03:13 - перейти к сообщению
byfahrenheit, я Вам написал про кеширование на стороне сервера, потому что многие браузеры "по-своему" понимают команды кеширования, которые им дают. Чтобы максимально уменьшить нагрузку на сервер - нужно пользоваться кешом на стороне сервера.
7. byfahrenheit - 19 Июля, 2011 - 21:14:12 - перейти к сообщению
Это я знаю, но тут никак на стороне сервера, т.к.:
Запрос все равно будет следовать на сервер, т.е. картинка будет опять-же долго грузиться.

Вот для примера: http://g[dot]nfs-s[dot]com/4218/nfsw_MACROSDHC[dot]png
тут явно стоит кэширование на стороне клиента, т.к. при первой загрузке картинка дольше грузится, а при последующей - моментально.
8. grefon - 19 Июля, 2011 - 21:52:26 - перейти к сообщению
byfahrenheit пишет:
Вот для примера: http://g.nfs-s.com/4218/nfsw_MACROSDHC.png

Ну вообще-то у меня картинка загрузилась моментально. Так что или провайдер хороший, или они тоже кешируют на стороне сервера.
9. LIME - 19 Июля, 2011 - 22:16:59 - перейти к сообщению
byfahrenheit посмотрел заголовки которыми обменивается ваш пример с браузером
ничего вообще не предпринимается
стандартное кэширование браузером
потому и грузится 1ый раз долго потом просто из кэша браузера берется
привожу заголовки для двух обращений чтоб вы могли заметить разницу
Спойлер (Отобразить)

(Добавление)
первый же заголовок ответа указывает когда истекает срок актуальности
(Добавление)
во втором запросе обратите внимание на заголовок запроса If-Modified-Since
и код ответа
10. byfahrenheit - 19 Июля, 2011 - 22:22:29 - перейти к сообщению
Спасибо всем большое) Прощу прощение если что не так)
Ввобщем сделал следующим образом:
Если картинки нет на сервере или она устаревшая, то скрипт обрабатывает ее и загружает на сервер. (в принципе изначально так думал сделать, но там были проблемы с моем скрипте, из-за которых скрипт тупил. теперь проблему исправил, и все работает)

Что-бы картинки не накапливались в директории, хотелось бы сделать авто очистку директории в заданное время, не зависимо от запроса скрипта. Не подскажете как лучше реализовать?
11. grefon - 19 Июля, 2011 - 23:07:17 - перейти к сообщению
Поставьте удаление всех файлов в папке на cron.
12. byfahrenheit - 20 Июля, 2011 - 13:35:32 - перейти к сообщению
Спасибо. Так и сделаю...
p.s. Жаль не могу поставить +, не хватает сообщений

 

Powered by ExBB FM 1.0 RC1