Оптимізація паралельних завантажень для мінімізації витрат
Середня веб-сторінка містить більш ніж 50 об'єктів (Krishnamurthy і Wills 2006), причому витрати на кількість об'єктів домінують над іншими затримками при завантаженні більшості веб-сторінок (Yuan 2005). Браузери, дотримуючись рекомендацій специфікації HTTP 1.1, зазвичай встановлюють не більше 2 одночасних з'єднань (це справедливо тільки для IE6/7, для Firefox і Opera цей параметр, що налаштовується, становить не менше 4, за замовчуванням. Для IE8, за словами Алекса Могилевського, швидше за все 6) з одним хостом. При збільшенні кількості HTTP-запитів, потрібних для відображення сторінки, з 3 до 23 час, що витрачається саме на «чисте» завантаження об'єктів, від загального часу завантаження падає з 50% до 14% (див. малюнок 1).

Рисунок 1: затримки під час завантаження великої кількості об'єктів
Якщо кількість об'єктів на сторінці перевищує 4, то витрати на очікування доступних потоків та розбір чанків для надісланих об'єктів (describing the object chunks) переважають над загальним часом завантаження сторінки (від 80% до 86% для 20 та 23+ об'єктів, відповідно) порівняно з часом, що йде на дійсне завантаження даних. Час ініціалізації (description time) плюс час очікування, викликаний обмеженням на паралельні з'єднання, займають від 50 до 86% від загального часу завантаження сторінки. Chi і Li також вказують на те, що при збільшенні числа об'єктів, що підключаються, понад 10 час ініціалізації (або визначення) зростає до 80% і більше від загального часу, що йде на отримання об'єктів (Chi і Li 2002). Ви можете істотно зменшити витрати на доставку великої кількості об'єктів (більше, ніж 12 на сторінку) включенням для сервера keep-alive режиму та розподілом запитів по кількох хостах (Hopkins 2007).
Обмеження напаралельні завантаження «душить» браузери
- Віддавати ваші об'єкти з кількох серверів
- Створити кілька піддоменів для кількох хостів
Використання кількох серверів
Ви можете, звичайно, налаштувати кілька серверів для обслуговування видачі картинок або інших об'єктів, щоб збільшити кількість паралельних завантажень. Наприклад:
Однак, кожен з цих піддоменів не повинен перебувати на окремому сервері.
Використання кількох хостів на одному сервері
Більш елегантним (і практичним) рішенням буде налаштування кількох піддоменів, які вказують на той самий сервер. Цей метод змушує браузери думати, що об'єкти віддаються з різних хостів, дозволяючи таким чином завантажувати одночасно більше двох об'єктів із сервера. Наприклад, ви можете виставити:
У записах вашої DNS-зони. Тепер ви можете звертатися до різних об'єктів використовуючи різні хости, навіть якщо ці об'єкти розташовуються на одному сервері. Наприклад:
Всі ці URL вказують на:
Оптимальна кількість хостів для мінімізації витрат на доставку об'єктів
Пара досліджень, проведених незалежно Yahoo! і Gomez продемонстрували, як збільшення числа хостів здатне зменшити затримки при паралельних завантаженнях. А Steve Souders та Tenni Theurer з Yahoo! виклали звіт про результати тестів у своєму блозі Performance UI (Theurer та Souders 2007). Змінюючи кількість доступних хостів поряд з розміром об'єктів, інженери з Yahoo! встановили, що підключення двох хостів дає найшвидший відгук великих файлів (див. малюнок 2). Theurer виклав графік, який містить більш детальну статистику за часом відгуку, числом хостів та розміром файлів.

Рисунок 2: Середній час відгуку в залежності від числахостів
Ryan Breen з Gomez провів ряд тестів у схожих умовах, використовуючи ті самі методи. Він досяг 40% прискорення при використанні трьох хостів (див. Рисунок 3).

Рисунок 3: Загальний час завантаження в залежності від кількості з'єднань (2 та 6)
Висновок
Автори не стосуються ще одного, дуже цікавого моменту в оптимізації часу завантаження шляхом збільшення числа паралельних потоків. Полягає він у вирівнюванні і збільшенні розміру об'єктів, що одночасно завантажуються, щоб максимально використовувати наявні з'єднання. Наприклад, якщо у вас є 40 картинок по 5Кб, то набагато вигідніше буде віддавати 10 картинок по 20Кб з двох хостів, ніж 20 (по 10Кб) з 4 хостів або 40 з 8. Загальні затримки в першому випадку будуть мінімальними через максимізацію ефективної швидкості завантаження даних клієнта.
Можна піти і далі і завантажувати, наприклад, 4 картинки по 50Кб у 4 потоки, досягаючи просто феноменального прискорення. Однак, тут бере участь психологічний фактор: користувачеві буде не комфортно, якщо він бачити сторінку взагалі без картинок весь той час, поки вантажиться 50Кб, і він може просто піти з сайту.
Матеріал для читання
Демонструється перевага використання більше двох з'єднань одного хоста при оптимізації AJAX-додатків. Досягнуто 40% прискорення під час завантаження за рахунок динамічного програмного призначення різних піддоменів для об'єктів.
Chi, C. та X. Li, «Дослідження доступу до сторінки на основі завантаження об'єктів».
Час з'єднання (connection time) займає від 6 до 17% загальної затримки при отриманні веб-об'єкта (від моменту відправки запиту до першого байта).
Fielding, R. та ін., «Протокол передачі гіпертексту - HTTP/1.1», консорціум World Wide Web, Червень 1999 року.
Визначає протокол HTTP 1.1, який визначає, як веб-сервери взаємодіє з браузерами. Специфікація включає поняття постійних з'єднань збільшення продуктивності. Також у ній рекомендується обмежитися двома з'єднаннями на хост, що реалізовано у більшості браузерів.
Krishnamurthy, B. і C. Wills, «Кішки-мишки: витрати на доставку вмісту при доступі до веб-сторінок», WWW 2006, 23–26 травня, 2006, Едінбург, Шотландія.
У дослідженні отримано, що великих файлів 2 є оптимальним числом хостів, що дозволяє запустити одночасно 4 паралельних завантаження.
Yuan, J., Chi, C.H. і Q. Sun, «Точніша модель для веб-завантажень», WWW 2005, 10–14 травня, 2005, Чіба, Японія.
Дослідники показали, що час ініціалізації (Definition Time) та час очікування (Waiting Time) об'єктів істотно впливає на загальну затримку при завантаженні веб-сторінок, хоча це і тотально ігнорується більшістю досліджень об'єктного рівня. Залежно від кількості об'єктів на сторінці ці часи в сукупності становлять від 50 до 85% загального часу завантаження. Якщо кількість об'єктів на сторінці перевищує 4, затримки такого роду домінують над іншими.