Сайт Игоря Кононученко   Статьи

Оптимизация JavaScript — делаем билд процесс

6 февраля 2008

В моем проекте очень много классов взаимодействуют на клиентской части. Каждый класс лежит в отдельном файле для удобства разработки. Хорошей практикой для увеличения скорости загрузки страницы, является уменьшение количества запросов к серверу. Поэтому чем меньше файлов ирисунков включать в страницу тем быстрее она загрузится. В случае с рисунками — СSS спрайты помогут уменьшить количество запросов. А в случае с js и css файлами — это конкатенация файлов и сжатие. Об этом и поговорим.

Очень удобный инструмент с открытым исходным кодом js-builder

js-builder

Отличный инструмент для того чтоб сформировать в правильном порядке конкатенацию файлов. Работает с любыми расширениями, которые задаешь. Также сжимает js.

В моем проекте я использую библиотеку prototype.js. Билдер при сжатии прототайпа выдает эксепшн. Поэтому я скачал исходники и перебилдил так чтоб билдер занимался только конкатенацией без сжатия. Я перебилденную длл, можно скачать тут

Билдер также содержит консольное приложение. А это то что нужно для билда.

Далее необходимо сделать компрессию файлов которые сгенерирует билдер.

Для этой цели я использовал YUI Compressor. Отличная библиотека с высокой степенью сжатия.

Осталось только как то автоматизировать процесс сборки. Для этого я написал batch файл (я в виндовс работаю). Выглядит он (build.bat) примерно так

1
2
3
4
5
6
7
8
9
set path1=D:\Projects \build\	 

%path1%JSBuilder\JSBuildConsole.exe /path=%path1%MyHeritageBuild.jsb 

 java -jar  %path1%yuicompressor-2.3.1\build\yuicompressor-2.3.1.jar 
%path1%build\output_file_from_js_builder.js  -o %path1%target-min.js   

java -jar  %path1%yuicompressor-2.3.1\build\yuicompressor-2.3.1.jar 
%path1%build\style-all.css  -o %path1%style-all-min.css

В моем случае джс билдер на выходе дает 2 файла — css и js, а компрессор и сжимает. Надеюсь это поможет вам создать удобный процесс сборки файлов.

Обучение верстке
Азбука хорошего разработчика. Книжки для чтения
Ctrl
Прагматичное юнит-тестирование
Linq to SQL и DDD