На практике

 

 

Хранить информацию о зависимостях можно, например, следующим образом (добавляя в «модули» служебные комментарии):

 

// #REQUIRE: array.map.js

// #REQUIRE: sprintf.js

....

код

 

Выделить подобные метки из текстового файла не составляет труда. Естественно, чтобы получить полное дерево зависимостей, надо будет пройтись по всем доступных файлам – но полное дерево обычно не нужно.

К чему мы пришли?

 

 

Затратив один раз кучу времени на формирование модулей и зависимостей между ними, мы экономим время каждый раз , когда хотим уменьшить объем загружаемого клиентов внешнего файла. Это приятно. Но все‑таки часть проблемы осталась – пользователь загружает весь JavaScript‑код, который используется на сайте в течение первого захода на произвольную страницу, даже если на текущей странице этот код не нужен.

Итак, мы оставили нового пользователя наедине с единственным JavaScript‑файлом, не включающим ничего лишнего. Стал ли при этом пользователь счастливее? Ничуть. Наоборот, в среднем пользователь стал более несчастным, чем раньше, а причина этому – увеличившееся время загрузки страницы.

Немного из теории HTTP‑запросов

 

 

Время загрузки ресурса через 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)

 

Очевидна экономия в 2(T1 + L).

Для 20 ресурсов эта экономия составит уже 19(T1 + L). Если взять достаточно типичные сейчас для домашнего/офисного Интернета значения скорости в 256 Кбит/с и пинга ~20‑30 мс, получим экономию в 950 мс – одну секунду загрузки страницы. У людей же, пользующихся мобильным или спутниковым интернетом с пингом более 300 мс, разница времен загрузки страниц составит 6‑7 секунд.

На первый взгляд, теория говорит, что загрузка страниц должна стать быстрее. В чем же она разошлась с практикой?








Дата добавления: 2015-05-19; просмотров: 750;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.