Сжимаем JavaScript и CSS файлы


Один из этапов клиентской оптимизации – сжатие и объединение JavaScript и CSS файлов.

Для этой цели лучше всего использовать YUI compressor, а чтобы этот процесс не занимал много времени я написал простенький bash скрипт:

#!/bin/bash
# Javascript source
SRC="./src/"
RES="./project.min.js"

# declare script array
ARRAY=( 'jquery' 'jquery-ui' 'jquery.tooltip' 'jquery.colorbox')
# get number of elements in the array
ELEMENTS=${#ARRAY[@]}

rm $RES

# echo each element in array 
# for loop
for (( i=0;i<$ELEMENTS;i++)); do
    echo "Compress file '${ARRAY[${i}]}'"
    echo "/*${ARRAY[${i}]}*/" >> $RES
    java -jar yuicompressor-2.4.2.jar --charset utf-8 $SRC${ARRAY[${i}]}.js >> $RES
done 

Запускаем скрипт и ждем окончания выполнения – вуаля – у нас один сжатый скрипт, использование которого облегчает жизнь серверу…

Для CSS написан аналогичный скрипт, лишь разница в путях, можно и объединить скрипты в один, но меняя JS пережимать еще и CSS не хочется…

22 thoughts on “Сжимаем JavaScript и CSS файлы”

  1. Вариант хороший, одно время тож все на bash собирал, счас перешел на ant проще, практичнее и абстрактнее

  2. вроде бы google closure complier чуть лучше сжимает, jquery его теперь использует

  3. Ant слишком сложная и громоздкая штука, для деплоймента намного удобнее использовать Capistrano или Fabric. По поводу поста: еще замечательный инструмент juicer, который избавляет от необходимости писать лишний раз bash-скрипты:)

  4. это все прекрасно, но. если внезапно добавится еще файлы придется изменять этот скрипт.
    + не все могут это исполнять на сервере. предлагаю http://code.google.com/p/minify/

  5. Тоже хотел спросить почему не гугло-компилятор, он конечно не умеет сжимать CSS, и для этого нужно иметь и еще и YUI compressor, но JS он сжимает лучше.

  6. Тоже хотел спросить, почему не гугло-компилятор, он конечно не умеет сжимать CSS, и для этого рядом с ним должен лежать YUI compressor, но JS он сжимает лучше, переход jQuery на него — лишнее тому подтверждение.

  7. Dear Anton,
    Congratulations for the good work.
    I translated Construction into Polytonic (classical) Greek. Language code = el-po.
    The .mo file is in
    http://www.keymangreek.gr/wp-translation/constructor/el-po.mo
    The .po file is in the same directory:
    http://www.keymangreek.gr/wp-translation/constructor/el-po.po
    If you think appropriate, you can include them in the constructor distribution package.

    While testing the translation, I noticed that some wordings are still untranslated, i.e, they appear in English. Whenever you produce a .po file that includes them, please, let me know, so that I can update accorgingly.

    Thanks in advance,
    Amaryllis

  8. с каких то пор ANT сложная штука? она сложная только пока вам не нужно собирать по 50 раз новые билды

  9. Удалять сжатый файл до создания нового не лучшая идея.
    Лучше писать новый файл во временный, а потом временный подменять на основной.
    И перед подменой делать проверку md5sum и проверку, что новый файл действительно создался без проблем (например прав на запись).
    Тогда, организовывая deployment можно этот срипт вызывать через cron или по опрделенному событию в build файле.

  10. @random Наверное не совсем точно выразился. Я имел в виду, что возможности Ant превосходят потребности разработчиков, которые пишут веб-приложения на интерпретируемых языках (собственно, основная аудитория этого блога). В этом случае билд = деплоймент, который в свою очередь состоит из рутинных команд:
    1) зайти по ssh на удаленный сервер
    2) обновить код из стабильной ветки репозитория
    3) объединить и сжать css и js
    4) выполнить миграции БД
    5) перезапустить сервер (если нужно)
    Для решения именно вышеперечисленных задач есть специальные удобные инструменты, почему бы ими не пользоваться?

    Кстати, можно и дальше автоматизировать этот процесс, например создать post-recieve хук для git:)

  11. М, я тоже такую штуку делал, на C++, только чтобы сначала обфусцировать скрипты, а потом паковать в xpi файл – ‘компилить’ плагин для фаерфокса.

  12. Я обычно для деплоймента использую phing. Такой себе ant на php :).

  13. Для ускорения лучше сначала собрать все в один файл а потом его уже сжимать.
    Причем можно нечто типа

    cat file1 file2 .. filen | $minify >>$RES

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.