11
11/2009

Мысли по поводу минимизации js файлов

The English version of this post

Мысли по поводу минимизации js файловСейчас достаточно стандартной практикой стала минимизация js- и css-файлов. Сформировались как сервисы (Packer от Дена Эдвардса, JS Minifier), так и server-side скрипты для автоматической минимизации файлов (YUI Comressor, JSMin для PHP). Все это очень хорошо, я не спорю. Но мне сейчас хотелось бы обсудить «стратегию» минимизации.

Дело в том, что при оптимизации загрузки страницы, как правило, рассматривают вопрос снижения времени скачивания js-файлов, но упускают вопрос инициализации загруженного кода.

Возьмем пример из реальной практики. Допустим, мы имеем портал, в котором клиентская часть (только javascript) состоит из 75 файлов общим объемом 800 Кб, в которых хранятся классы, содержащие управляющую логику, настойки и т.п., и 70% из инициализируется сразу после загрузки.

Если мы открываем такую страничку как есть с подключением 75 небольших js-файлов, то формируются очереди обращений к серверу, который скорее всего не успеет за раз быстро отдать все файлы. Но за счет постепенной загрузки и инициализации файлов пользователь видит плавную, хотя и небыструю загрузку портала.

Если мы возьмем другой крайний случай, когда все файлы минимизированы и объединены в один файл, что, к слову сказать, часто не легко сделать, то с одной стороны у нас все круто: один запрос к серверы, минимальный объем скачиваемых данных (допустим, мы сжали до 400 Кб), а с другой пользователь сидит 10 секунд, а у него ничего не происходит.

Наиболее оптимальным в данном случае мне кажется следующий вариант. Мы разбиваем минимизированный пакет на 2-3 файла, причем первый делаем наименьшего размера и вмещающим тот минимум классов, достаточный для того, чтобы страница начала «оживляться», пока оставшиеся js-файлы будут подгружаться. Далее подгружается файл №2, который подхватывает инициализацию первого файла, в это время догружается файл №3 и далее по аналогии.

При выборе последнего варианта мы оставляем на приемлемом уровне количество запросов к серверу и общий размер js-файлов, но при этом не создаем ощущения «зависшего» браузера у пользователя при загрузке страницы.

Все вышеописанное, конечно, актуально для больших js-библиотек от 500 Кб.

1 Comments_1

Но скажем, 90% сайтов, например типичных блогов имеют 0-3 JS файла, им этот материал чужд :)
Оставить comment
Показать другие цифры

В тексте комментария можно использовать теги <b><i><u><s><sup><code><pre>.
Адреса сайтов автоматически становятся ссылками.

_