2012-03-28 2 views
0

Я знаю, что вопросы по сжатию javascript заданы несколько раз, но я не могу найти ответ на мою проблему.Сжатие нескольких файлов JavaScript в отдельные файлы

У меня есть проект, который имеет общие скрипты (jQuery и некоторые другие) и специальные страницы. jQuery Mobile позволяет кэшировать общие скрипты во время сеанса, загружая все, что находится в <head>, только один раз. Конкретные сценарии вытягиваются только в том случае, если страница загружена до тех пор, пока вы положили <script> в <div data-role="page">.

Я нахожу это замечательным, потому что он оптимизирует скрипты, загружаемые при просмотре страниц моего приложения, и гарантирует, что браузер будет иметь минимальный javascript в памяти в любое время.

Однако, это ужасно для минимизации, потому что существуют зависимости между различными файлами, которые невозможно объединить.

До сих пор я нашел два решения, которые не устраивают меня так хорошо:

  • используя простую минификацию скрипт, который не изменяет функцию и имена переменных: она удваивает размер файлов по сравнению с продвинутой версией
  • группируя все сценарии в один и сжать его затем поместить его в <head>: вы теряете способность только загружать скрипты, которые вы можете захотеть и браузер ненужных функций нагруженных

(я исключаю Manua LLY изменение имен функций, очевидно;))

Ищу компрессор, который может сделать один из них:

  • сжать все файлы вместе, но выводить их в отдельные файлы, чтобы сохранить модульность
  • если это невозможно, сжимать файлы самостоятельно расширенным способом, но с тегами, которые могут препятствовать переименованию minifier на внешние функции или переменные (например, jQuery)

Существует ли это?

ответ

0

После ознакомления со всем этим, Google Closure Compiler может это сделать (и многое другое).

путь заключается в определении экстернов для:

  • библиотека третьей стороны вы используете (JQuery, JQuery Mobile ...). Вы можете найти some of them there.
  • дом сделал сценарии, загрузив отдельно

Очевидно, что если сжать домашние сделаны скрипты, которые загружаются отдельно, вы должны экспортировать переменные, которые вы хотите использовать в другом месте, используя следующий метод (detailed in Closure Compiler documentation):

/** 
* A function you want to be able to call from elsewhere after compressing 
* @param {string} a 
*/ 
function exportedFunction(a) {alert(a);} 

window['exportedFunction'] = exportedFunction; 

Затем вы можете сжимать файлы, которые вы хотите, партиями или отдельно. Это такой мощный инструмент, что я не могу поверить, что раньше не использовал его.

Смежные вопросы