Почему крупные сайты размещают свои изображения /css на внешних доменах?

Почему сайты, такие как Facebook, Twitter и Google, размещают свои изображения и css на внешних доменах, например:

  • Facebook: static.ak.fbcdn.net
  • Twitter: a0.twimg.com
  • Google: ssl.gstatic.com

Вопрос (ы):

  • Является ли производительность? или безопасности?
41 голос | спросил Rick Rhodes 4 MaramSun, 04 Mar 2012 02:28:24 +04002012-03-04T02:28:24+04:0002 2012, 02:28:24

4 ответа


50

@toomanyairmiles частично правильный - цель этого метода - разрешить параллельные соединения с веб-браузером на сервере. Веб-браузеры должны разрешать минимум двух одновременных подключений к одному хосту, но многие новые браузеры могут управлять до 60. Независимо от того, одновременные одновременные соединения между браузером и веб-сервером (-ами) являются основной скоростью узкое место.

Из ресурса Google :

  

В спецификации HTTP 1.1 (раздел 8.1.4) указано, что браузеры должны разрешать не более двух одновременных подключений для каждого имени хоста (хотя более новые браузеры допускают больше, чем это: см. раздел Browserscope для списка). Если HTML-документ содержит ссылки на большее количество ресурсов (например, CSS, JavaScript, изображения и т. Д.), Чем максимум, разрешенный на одном хосте, браузер выдает запросы на это количество ресурсов и останавливает остальные. Как только некоторые из запросов заканчиваются, браузер выдает запросы на следующее количество ресурсов в очереди. Он повторяет этот процесс, пока он не загрузит все ресурсы. Другими словами, если страница ссылается на более чем X внешних ресурсов с одного хоста, где X - это максимальное количество разрешений, разрешенных для каждого хоста, браузер должен загружать их последовательно, по одному за раз, при этом каждый RT-ресурс должен иметь 1 RTT. Общее время округления - N /X, где N - количество ресурсов для извлечения из хоста. Например, если браузер разрешает 4 одновременных соединения для имени хоста, а страница ссылается на 100 ресурсов в том же домене, это повлечет за собой 1 RTT на каждые 4 ресурса и общее время загрузки 25 RTT.

Таким образом, чтобы обойти это, нужно «очертить» запросы для разных доменов или хостов:

Опять же, из того же ресурса Google:

  

Баланс параллелизуемых ресурсов по именам хостов.   Запросы на большинство статических ресурсов, включая изображения, CSS и другие двоичные объекты, могут быть распараллелены. Баланс запрашивает все эти объекты как можно больше по именам хостов. Если это невозможно, как правило, постарайтесь обеспечить, чтобы ни один хост не обслуживал более чем на 50% больше, чем средний для всех хостов. Так, например, если у вас есть 40 ресурсов и 4 хоста, каждый хост должен обслуживать в идеале 10 ресурсов; в худшем случае ни один хозяин не должен обслуживать больше 15. Если у вас есть 100 ресурсов и 4 хоста, каждый хост должен обслуживать 25 ресурсов; ни один хозяин не должен обслуживать более 38 человек.

Но есть еще одна загадка. Каждый запрос обычно поставляется с собственными накладными расходами, обычно в виде файлов cookie. Статические элементы, такие как изображения, CSS и JavaScript, не должны передавать данные cookie, поэтому , обслуживающий их из доменов cookie-less (sub) , может привести к более быстрым раундам:

  

Статический контент, такой как изображения, файлы JS и CSS, не обязательно должен сопровождаться файлами cookie, так как взаимодействие с этими ресурсами отсутствует. Вы можете уменьшить задержку запроса, обслуживая статические ресурсы из домена, который не служит куки. Этот метод особенно полезен для страниц, ссылающихся на большие объемы редко кэшированного статического контента, таких как часто изменяющиеся эскизы изображений или редко используемые архивы изображений. Мы рекомендуем этот метод для любой страницы, которая обслуживает более 5 статических ресурсов. (Для страниц с меньшим количеством ресурсов, чем это, не стоит затрат на создание дополнительного домена.)

     

Чтобы зарезервировать домен cookieless для обслуживания статического контента, зарегистрируйте   новое имя домена и настроить свою базу данных DNS с записью CNAME   который указывает новый домен на вашу существующую запись домена A. конфигурировать   ваш веб-сервер для обслуживания статических ресурсов из нового домена и   не разрешать устанавливать файлы cookie в любом месте этого домена. В вашей сети   страниц, укажите имя домена в URL-адресах для статических ресурсов.

ответил Mike Hudson 4 MaramSun, 04 Mar 2012 05:14:16 +04002012-03-04T05:14:16+04:0005 2012, 05:14:16
12

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

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

ответил toomanyairmiles 4 MaramSun, 04 Mar 2012 03:50:54 +04002012-03-04T03:50:54+04:0003 2012, 03:50:54
7

Большие сайты перемещают свой статический контент (изображения, файлы JS и CSS) в сеть доставки контента или CDN, поскольку развертывание вашего контента на нескольких географически распределенных серверах сделает ваш страницы быстрее загружаются с точки зрения пользователя.

Поскольку CDN имеет другое доменное имя, он также предоставляет преимущества оглавления доменов .

ответил mvark 4 MaramSun, 04 Mar 2012 08:29:28 +04002012-03-04T08:29:28+04:0008 2012, 08:29:28
3

Ограничение в 2 пункта больше не является проблемой. Хотя это рекомендация спецификации HTTP, все современные браузеры позволяют не менее 6 одновременных подключений .

ответил seanhussey 19 J0000006Europe/Moscow 2013, 19:56:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132