Простой трюк, который может, вместе с тем, на ровном месте разгрузить веб-сервер и повысить тем самым производительность веб-приложения. Идея заключается в том, чтобы включить на клиентской стороне кэширование изображений, запрашиваемых с данного сайта. Вот, например, как это делается для J2EE серверов (источник - Coldbeans):
1. Добавляем к своему веб-приложению следующий фильтр: Expires filter. Этот фильтр позволяет добавлять на лету к обрабатываемым запросам HTTP заголовки Expires и Cache-control. Эти заголовки как раз и определяют кэширование результатов запроса на стороне клиента. Например, следующее описание в web.xml файле:
<filter>
<filter-name>ExpiresFilter</filter-name>
<filter-class>com.cj.expire.ExpiresFilter</filter-class>
<init-param>
<param-name>expires</param-name>
<param-value>86400</param-value>
</init-param>
</filter>
определяет кэширование на 1 сутки (время - в секундах)
2. Остальное прозрачно. Задаем мэппинг этого фильтра для изображений:
<filter-mapping>
<filter-name>ExpiresFilter</filter-name>
<url-pattern>*.gif</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ExpiresFilter</filter-name>
<url-pattern>*.jpg</url-pattern>
</filter-mapping>
...
теперь запрашиваемые изображения типа http://наш_сервер/что_то.gif будут кэшироваться на клиентской стороне
Для PHP можно, например, прописать установку данных заголовков прямо для Apache. Это что-то вроде следующего:
<FilesMatch "\.(jpg|jpeg|png|gif|ico)$">
Header add "Expires" "Mon, 01 Jan 2018 00:00:00 GMT"
Header add "Cache-Control" "max-age=31536000"
</FilesMatch>
При чём тут вообще PHP?
ReplyDelete