Да, таких онлайн упаковщиков, можно было бы конечно использовать curl и hpricot, но сами понимаете это не так удобно + зависимость от сторонних сервисов.
Тоже возможный вариант, сначала я рассмотривал подобные подобные упаковщики, но в виде гема мне показалось привлекательней. Для описанного случая интеграция с IDE не нужна, цель описанного способа разделить яваскрипты для разных целей (разработчикам не нужны упакованные файлы и наоборот). Скрипты должны паковаться исключительно на сервере, т.к. неудобно когда разработчику после изменения яваскрипта необходимо его еще и запаковывать.
Tip: если кто-то делает деплой без capistrano вручную через ssh (git, apache/nginx + passenger), можно испльзовать на сервере команду «git pull && rake packr:pack && touch tmp/restart.txt»
Да, тут вы правы, просто у меня задание к phing (аналог ant только для php) запускается из netbeans и у меня нет rubi на компьютере, поэтому компрессор на java удобнее :)
В официальной версии (sbecker) этого нет. Но есть во многих форках (первые повашиеся сейчас на глаза: eandrejko,menno).
В моем форке тоже есть, но его я бе не советовал использовать сразу, он ушел немного в сторону от основной ветки. В частности, у меня по прежнему используется номер версии в имени файла, а не в параметре и нет автоматической генерации упакованного файла.
Спасибо за информацию!
Я иногда люблю изобретать велосипеды, необычная задача всегда интересней рутинной работы. Так как велосипед обчно делается «под себя», это позволяет сделать его более простым и оптимальным для своего случая, нежели в некоторых плагинах, для которых больше важна универсальность и применимость абсолютно во всех случаях. Хотя во многих плагинах уже разработаны достаточно сложные алгоритмы, которые не имеет смысла переделывать, за что я их и люблю.
Ваш велосипед можно вполне запаковать в простенький гем-плагин, у него есть преимущество как минимум в том, что он проще устроен, чем asset_packager =)
Как я понимаю, единственный минус — то, что packr не умеет работать с CSS. Но для сжатия CSS вполне можно использовать и простое удаление пробелов — наверное, ничего разумней там сделать и нельзя.
Ага, с css он не работает. css тут не рассмтривается, т.к. все приложения с которыми я имею дело переведены на compass, а он и сам умеет генерировать компактный css. По поводу сжатия css вы правы, больше чем удалить лишние пробелы, переносы строк и комментарии тут ничего не сделать.
Поясните. Я примерно представляю о чем вы, можно создать makefile с набром файлов и правил. Но в данной статье помимо упаковки есть еще и интеграция с javascript_include_tag, что позволяет подключать несколько файлов по ключу. Так же для изменения списка подключаемых яваскриптов требуется отредактировать всего один файл js_files.yml и эти изменения подхватит и упаковщик. В случае же с makefile, я так понимаю потребуется его перегенерация.
В production все запакованные файлы объединяются в один javascript_include_tag :base, :cache => «base_packed» выдаст:
<script type=«text/javascript» src="/javascripts/base_packed.js?1249741119">
Указывается всего лишь ключ :base для подключения всех указанных файлов.
>В данной статье я опишу как сжимать яваскрипты дла production, объединять их в один файл,
Это решение не всегда является приемлемым. И если для простых сайтов объединение в один файл еще прокатит, то для сложных систем такой подход будет приводить к:
1. К паразитной загрузке ненужных для текущей страницы, но объединенных скриптов. Паразитные скрипты, кроме того, отбирают ресурсы у клиента.
2. Если текущая страница требует своих «особых» скриптов, и если создать разные версии «объединенных» скриптов, — то порождается неоптимальное использование клиентского кеша, и рост траффика, который можно избежать (например ядро jQuery присутствует в нескольких объединенных файлах).
3. Невозможность «параллельной загрузки» (загрузка с разных доменных имен), когда объединение наоборот тормозит загрузку.
В статье не отмечен один из самых важных этапов «згрузочной оптимизации». Это:
1. настройка сервера для сверки etag и отдачи 304. Что позволяет сократить максимально трафик.
2. настройка сервера на использование клиентского кеша ExpiresDefault. Что позволяет вообще избежать обращений к серверу.
3. (про это упоминалось) — настройка gzip сжатия.
При выполнении п.1 и 2, — упаковщик из благодетеля превращается в зло, ибо нивелирует их эффективность.
Тогда возникает вопрос, стоит ли вообще пользоваться упаковщиком. Для маленьких сатов, где вариация невысока, — да, безусловно. Для сложных систем — выгоднее использовать хорошо спроектированную модульную структуру, как сделано, например в Dojo.
Будьте внимательней, название статьи «Сжатие javascript средствами packr». Ваши претензии никак не относятся к теме.
> Если текущая страница требует своих «особых» скриптов …
можно подгружать их отдельно и сделать несколько ключей
base:
— swfobject.js
— jquery-1.3.2.js
— jquery.media.js
— application.js
markitup:
— jquery.markitup.js
— jquery.markitup.set.js
и т.д.
по поводу
>… 304… ExpiresDefault… gzip
— это настройка веб-сервера (чаще всего это Apache или Nginx либо даже их связка), которая не входит в задачи данной статьи.
Как все это сделать очень легко найти в гугле, тем более способов для этого много. Копипастить смысла не вижу.
> загрузка с разных доменных имен
опять же легко настраивается, но никак не относится к теме.
файл production.rb:
# Enable serving of images, stylesheets, and javascripts from an asset server
# config.action_controller.asset_host = «assets.example.com»
Если надо больше хостов:
Alternatively, you can exert more control over the asset host by setting asset_host to a proc like this:
ActionController::Base.asset_host = Proc.new { |source| «assets#{rand(2) + 1}.example.com» }
>Ваши претензии никак не относятся к теме
Претензий никаких не было.
Теперь будут.
Похоже, суть Вашей статьи — это оптимизация загрузки страницы для небольших сайтиков (а Вы, вероятно только ими и занимаетесь). Только вот непонятно, неужели у них вообще существует потребность в оптимизации?
>Как все это сделать очень легко найти в гугле
Ага-ага. И про обфускацию и минимизацию тоже.
>опять же легко настраивается, но никак не относится к теме.
Да кому нужна эта тема. Людей интересует скорость загрузки, а не басня про шашечки.
P.S.: Последний Ваш комментарий (не без моей подачи) несет больше пользы для читателей, чем сама статья. Будьте внимательней ))
Сжатие javascript средствами packr