Как лучше всего кэшировать изображения на моем сайте? - PullRequest
0 голосов
/ 05 февраля 2009

У меня есть сайт

www.somesite1.com, который получает все изображения с сайта www.somesite2.com

В данный момент каждый раз, когда изображение должно отображаться, мы просто используем абсолютный URL, чтобы получить его вот так

<img src="http://www.somesite2.com/images/myimage.jpg" />

Таким образом, каждый раз, когда пользователь заходит на www.somesite1.com, контент www.somesite2.com забивается.

Я ищу умные способы кэширования изображений, возможно, используя заголовки http или что-то подобное. Спасибо

Ответы [ 4 ]

3 голосов
/ 05 февраля 2009

Самый простой ответ - установить заголовок HTTP Expires с большим значением в будущем (скажем, 10 лет). Таким образом (теоретически) браузер никогда не должен запрашивать это изображение снова, снимая огромную нагрузку с вашего сервера, если у вас много повторных посещений. Конечно, вам нужно придумать механизм для изменения URL-адреса изображения, когда вы хотите обновить изображение. Большинство людей подходят к этому, добавляя номер сборки в путь куда-либо (или добавляя номер сборки в строку запроса).

Здесь есть хорошая информация о производительности (включая использование заголовка Expires):

http://developer.yahoo.com/performance/rules.html

Лично я бы не стал беспокоиться о том, чтобы кэшировать их на стороне сервера (полагаю, они не генерируются динамически). Их подают прямо с диска, поэтому накладные расходы в любом случае должны быть небольшими. Убедитесь, что у вас есть отдельный компьютер для обслуживания статического контента и вы используете очень легкий веб-сервер, такой как Lighttpd или nginx, который должен помочь увеличить пропускную способность.

http://www.lighttpd.net/

http://nginx.net/

0 голосов
/ 06 февраля 2009

Если ваш сайт не очень популярен, вам, вероятно, не нужен второй сервер для статического контента.

Если вы используете Apache HTTP, вы можете установить mod_cache. Вы также можете посмотреть на установку Squid Cache.

Я согласен с Энди Хьюмом, хотя, если вам нужен второй сервер, оставьте его легким и используйте что-то вроде lighttpd и Squid.

0 голосов
/ 05 февраля 2009

В вашей настройке нет ничего плохого, все работает отлично. Чтобы понять, что нужно сделать, чтобы он работал лучше, вы должны понимать, как работает браузер.

Во-первых, он будет читать документ HTML с www.somesite1.com. Затем он будет читать его, ища любые URL-адреса. Когда он найдет их, он начнет их загружать.

Таким образом, с точки зрения браузера, нет связи между сайтом 1 и 2. Если вы хотите улучшить кэширование для сайта 2, вы можете полностью игнорировать сайт 1.

Это означает, что вы должны указать веб-серверу на сайте 2 отправить правильную информацию о кеше в браузер. Например, пусть он отвечает на HEAD-запросы и / или устанавливает для времени жизни изображения какое-то большое значение в поле заголовка Cache-Control .

0 голосов
/ 05 февраля 2009

Храните отдельный веб-сервер только для изображений, поскольку изображения являются отдельными HTTP-запросами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...