Чому великі сайти розміщують свої зображення / css на зовнішніх доменах?


43

Чому сайти, такі як Facebook, Twitter та Google, розміщують їх зображення та css у зовнішніх доменах, таких як:

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

Питання:

  • Це продуктивність? чи безпека?

Відповіді:


53

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

З ресурсу Google :

У специфікації HTTP 1.1 (розділ 8.1.4) зазначено, що браузери повинні допускати щонайменше два паралельних з'єднання на ім’я хоста (хоча новіші браузери дозволяють більше, ніж це: див. Список браузера). Якщо HTML-документ містить посилання на більше ресурсів (наприклад, CSS, JavaScript, зображення тощо), ніж максимально дозволений для одного хоста, браузер видає запити на цю кількість ресурсів, а інші - в черзі. Як тільки деякі запити закінчуються, браузер видає запити на наступну кількість ресурсів у черзі. Він повторює процес, поки не завантажив усі ресурси. Іншими словами, якщо на сторінці згадується більше X зовнішніх ресурсів від одного хоста, де X - максимально дозволене з'єднання на один хост, браузер повинен завантажувати їх послідовно, X за один раз, несучи 1 RTT для кожного X ресурсу. Загальний час в обидва кінці - 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, може призвести до швидших круглих поїздок:

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

Щоб зарезервувати домен, що не містить файлу cookie, для розміщення статичного контенту, зареєструйте нове ім’я домену та налаштуйте свою базу даних DNS із записом CNAME, який вказує новий домен на ваш існуючий запис домену A. Налаштуйте свій веб-сервер для обслуговування статичних ресурсів з нового домену, і не дозволяйте будь-якому файлу cookie встановлювати будь-де в цьому домені. На своїх веб-сторінках посилайтеся на доменне ім’я в URL-адресах для статичних ресурсів.


13

Раніше веб-браузери могли завантажувати відразу два елементи (зараз 6 і більше), тому завантаження ресурсів з різних доменів відбувається швидше, ніж з одного домену. Це стосується всього, від зображень до javascripts.

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


7

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

Оскільки CDN має інше доменне ім'я, воно також надає переваги звуження домену .



-1

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

Так що так, це все ще потрібно для швидкості.


У прийнятій відповіді вже сказано, що файли cookie не надсилаються для зовнішнього домену. Ця відповідь не говорить нічого, чого інші відповіді вже не охоплюють.
Стівен Остерміллер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.