Время загрузки ресурса через HTTP-соединение складывается из следующих основных элементов:
T1
— для большинства запросов величина практически постоянная;T2
, которое, в свою очередь, состоит из постоянной для сервера сетевой задержки L
и времени получения ответа R
, прямо пропорционального размеру ресурса.Итак, время загрузки страницы будет состоять из времени загрузки HTML-кода и всех внешних ресурсов: изображений, CSS- и JavaScript-файлов. Основная проблема в том, что CSS и JavaSscript-файлы загружаются последовательно (разработчики браузеров уже работают над решением этой проблемы в последних версиях, однако пока еще 99% пользователей страдают от последовательной загрузки). В этом случае общение с сервером выглядит так:
— запросили страницу — получили HTML — запросили ресурс A: T1 — получили ресурс A: L + R(A) — запросили ресурс B: T1 — получили ресурс B: L + R(B) — запросили ресурс C: T1 — получили ресурс C: L + R(C)
Общие временные затраты при этом составят 3(T1+L) + R(A+B+C)
.
Объединяя файлы, мы уменьшаем количество запросов на сервер:
— запросили страницу — получили HTML — запросили ресурс A+B+C: T1 — получили ресурс A+B+C: L + R(A + B + C)
Очевидна экономия в Для 20 ресурсов эта экономия составит уже На первый взгляд, теория говорит, что загрузка страниц должна стать быстрее. В чем же она разошлась с практикой?2(T1 + L)
19(T1 + L)
. Если взять достаточно типичные сейчас для домашнего/офисного Интернета значения скорости в 256 Кбит/с и пинга ~20-30 мс, получим экономию в 950 мс — одну секунду загрузки страницы. У людей же, пользующихся мобильным или спутниковым интернетом с пингом более 300 мс, разница времен загрузки страниц составит 6-7 секунд.