Стратегия распространения загрузок изображений по доменам? - PullRequest
3 голосов
/ 04 марта 2012

Я работаю над PHP-оберткой для сервиса Google Image Charts API.Он поддерживает обслуживание изображений из нескольких доменов, таких как:

http://chart.googleapis.com
http://0.chart.googleapis.com
http://1.chart.googleapis.com
...

Числовой диапазон 0-9, поэтому всего доступно 11 доменов.

Я хочу автоматически отслеживать количество сгенерированных изображений ивращать домены для лучшей производительности в браузере.Однако сам Google только смутно рекомендует :

... вам это может понадобиться только в том случае, если вы загружаете, возможно, пять или более диаграмм на странице.

  • Какой должна быть моя стратегия?Должен ли я просто поменять домен для каждого N изображений, и какое будет хорошее значение N в контексте современных браузеров?

  • Есть ли точка, в которой имеет смысл повторно использовать домен, а не вводить новый (чтобы сохранить поиск DNS)?

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

Ответы [ 2 ]

1 голос
/ 04 марта 2012

Вопросы:

  • Один хост быстрее другого?
  • Ограничивает ли браузер подключение к хосту?
  • Сколько времени требуется браузеру для разрешения DNS-имени?

Поскольку вы хотите, чтобы это был компонент, я бы посоветовал вам сделать так, чтобы он имел несколько стратегий поиска имени хоста для использования. Это позволит вам не только иметь разные стратегии, но и проверять их друг против друга.

Также вы можете захотеть добавить поддержку библиотек javascript, которые могут отображать данные на странице в будущем, так что вы все равно можете захотеть оставаться модульными.

Варианты:

  1. Выберите одно доменное имя и придерживайтесь его с жестким кодом: http://chart.googleapis.com
  2. Выберите одно доменное имя из многих, придерживайтесь его: например, http://#.chart.googleapis.com
  3. Как 2, но начинайте вращать имя после некоторых изображений.
  4. Как и 3, но добавить в конец страницы некоторый фрагмент javascript, который разрешит DNS пропущенных имен хостов в фоновом режиме, чтобы он кэшировался для следующего запроса (укажите данные имен хостов, которые до сих пор не использовались).

Затем вы можете сделать свою библиотеку настраиваемой, чтобы вам не нужно было хардкодировать в коде значения, но вы предоставляете конфигурацию по умолчанию.

Затем вы можете добавить стратегию в качестве конфигурации, чтобы кто-то, кто ее реализует, мог принять решение.

Затем вы можете предложить компоненту загрузить конфигурацию извне, так что, скажем, если вы создаете плагин Wordpress, плагин может сохранить конфигурацию и предложить пользователю плагина административный интерфейс для изменения настроек.

Поскольку в конфигурации уже указана стратегия, которой вы будете следовать, вы полностью возложили ответственность на потребителя компонента, и вам будет проще интегрировать различные сценарии использования для разных веб-сайтов или приложений.

0 голосов
/ 04 марта 2012

Я не совсем понимаю запрос на ротацию доменов.Я полагаю, что в этом контексте имеет смысл, что ваш браузер может разрешить только X открытых запросов к данному домену одновременно, поэтому, если у вас есть 10 изображений, отправленных с chart.googleapis.com, вам может потребоваться дождаться, пока первая завершит загрузкуперед началом получения пятого и т. д.

Проблема случайного вращения доменов заключается в том, что вы полностью отказываетесь от кэширования браузера.Если изображение загружается с 1.chart.googleapis.com при загрузке одной страницы, а затем с 7.chart.googleapis.com при загрузке следующей страницы, кэшированная диаграмма становится недействительной, и пользователь должен дождаться его запроса,сгенерирован и загружен заново.

Лучшее решение, которое я могу придумать, - это каким-то образом определить домен для запроса с помощью алгоритмического запроса.Если это в функции, вы можете как-то md5 аргументы, преобразовать в целое число, а затем обслуживать изображение из {$result % 10}.chart.googleapis.com.

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

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