
Мне нужно загрузить много изображений с Amazon S3 на одной странице, и иногда загрузка всех изображений занимает довольно много времени. Я слышал, что разделение изображений для загрузки с разных поддоменов поможет параллельным загрузкам, однако какова фактическая реализация этого? Хотя разделение для поддоменов, таких как static, image и т. д., легко; стоит ли мне создать 10 поддоменов (image1, image2...) для загрузки, скажем, 100 изображений? Или есть какие-то хитрые способы сделать это?
(Кстати, я подумываю об использовании memcache для кэширования изображений S3; не уверен, возможно ли это. Буду благодарен за любые дальнейшие комментарии. Большое спасибо!
решение1
Я постараюсь разбить свой ответ на пункты, которые наверняка помогут вам с вашим статусом:
- Поскольку мы говорим о статическом контенте, я предлагаю использовать Nginx в качестве обратного прокси-сервера для сервера вашего статического контента. Медленная загрузка может быть вызвана тем, что вы достигли лимита Apache по одновременным соединениям.
- Использование разных или нескольких поддоменов может помочь в плане охвата самих браузеров, но, с другой стороны, может повлиять на общую глобальную скорость и рейтинг вашей страницы, поскольку ваши поддомены добавят больше запросов на разрешение DNS, что не есть хорошо.
- Взгляните на что-нибудь вроде Cloudflare.com, у них есть несколько бесплатных и очень хороших сервисов, которыми можно воспользоваться.
- Используйте заголовок кэширования браузера, это может оказаться большим подспорьем, если ваш контент не меняется очень динамично.
- Старайтесь всегда минимизировать статические скрипты (например, CSS, JS).
- Попробуйте воспользоваться каким-нибудь сервисом, например:http://tools.pingdom.com/fpt/иhttp://gtmetrix.com/поскольку они могут предоставить вам очень ценную информацию о производительности загрузки ваших страниц, а также ценные советы для достижения лучших результатов.
- Постарайтесь минимизировать запросы, которые генерируют ваши страницы (например, объединяйте изображения разных стилей или макетов в меньшем количестве изображений и управляйте ими с помощью CSS)
Хм... это то, что я имел в виду.
решение2
Наибольшее ускорение, которое вы получите, — это переход на CloudFront, CDN Amazon, который может располагаться перед S3 и значительно ускорять работу пользователей.
После этого, если захотите, вы можете создать несколько поддоменов CloudFront, которые будут указывать на один и тот же контейнер S3, а затем случайным образом назначать их изображениям, чтобы они загружались параллельно (по сути, это ваша идея image1, image2).
решение3
Ваша идея разделить изображения на несколько CNAMES хороша и лучше всего описана в рекомендациях Google:https://developers.google.com/speed/docs/best-practices/rtt#ParallelizeDownloads