Как вы минимизируете / обфусцируете код JavaScript в JSP, в котором смешаны переменные JSP / JSTL? - PullRequest
8 голосов
/ 22 ноября 2010

arrays.jsp:

//...
var x = <c:out value="${x}"/>
<c:if test="${empty doExternal}">
processExternalArrays();
</c:if>
//...

Я хочу минимизировать / скрыть JavaScript, содержащийся в большом файле JSP, в котором многочисленные переменные JSP / JSTL смешаны с кодом JavaScript, таким какв приведенном выше фрагменте.

Код опирается на переменные, которые заполняются с использованием серверной логики, а затем передаются в код на стороне клиента, как указано выше.

Я уже минимизирую свои файлы JS, используяКомпрессор YUI, но я не знаю, что делать с кодом JavaScript в моих JSP.

Можно ли минимизировать / запутать этот код, если он создается динамически?

Ответы [ 5 ]

3 голосов
/ 01 апреля 2011

Вероятно, лучшим решением для вас будет использование тега Granule JSP.Вы можете скачать его на http://code.google.com/p/granule/

пример кода:

<g:compress>
  <script type="text/javascript" src="common.js"/>
  <script type="text/javascript" src="closure/goog/base.js"/>
  <script>
       goog.require('goog.dom');
       goog.require('goog.date');
       goog.require('goog.ui.DatePicker');
  </script>
  <script type="text/javascript">
      var dp = new goog.ui.DatePicker();
      dp.render(document.getElementById('datepicker'));
  </script>
</g:compress>
...
2 голосов
/ 22 ноября 2010

Вы смотрели на htmlcompressor ?Короче говоря, это:

Java HTML / XML Compressor - это очень небольшая, быстрая и простая в использовании библиотека, которая минимизирует заданный источник HTML или XML путем удаления лишних пробелов, комментариев и других ненужных символов, не нарушаяструктура содержимого.

Его основная функция заключается в сжатии HTML и XML, но также поставляется с тегами JSP, которые можно использовать для сжатия встроенных блоков JavaScript с помощью YUI Compressor.Проверьте кодовую страницу Google, особенно Сжатие выборочного контента на страницах JSP раздел.

0 голосов
/ 22 ноября 2010

Если вы не можете или не хотите перемещать свой JavaScript из своего HTML, одной из возможностей будет создание обработчика тегов, который обернет содержимое ваших <script> тегов:

<script type="text/javascript"><js:compress>
    ...
</js:compress></script>

Обработчик, вероятно, может расширять SimpleTagSupport. Затем вам нужно будет изучить API Java для компрессоров / минификаторов, таких как YUI Compressor или dojo ShrinkSafe, и использовать их для обработки тела тега.

Редактировать: Извините, я просмотрел другие ответы, и похоже, что Зак Малгрю может ссылаться на taglib, который уже делает именно то, что я предлагаю ...

Редактировать2: Да, JavaScriptCompressorTag. Думаю, мне придется проголосовать за его ответ; -) ...

0 голосов
/ 22 ноября 2010

Убедитесь, что ваш вывод закодирован в формате gzip (apache mod_deflate). Минимизация html / js сначала может сделать его немного меньше, но ненамного.

0 голосов
/ 22 ноября 2010

Я не вижу других способов, кроме полного делегирования работы чисто JS с помощью Ajaxical Power в сочетании с сервлетом, который возвращает требуемую информацию по запросу Ajax (в духе JSON?).

Например, в сервлете

Map<String, Object> data = new HashMap<String, Object>();
data.put("doExternal", doExternal);
data.put("x", x);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(new Gson().toJson(data)); // Gson is a Java-JSON converter.

и в JS (с небольшой помощью jQuery , поскольку Ajax работает менее многословно)

$.getJSON('servleturl', function(data) {
    var x = data.x;
    if (!data.doExternal) {
        processExternalArrays();
    }
});

Таким образом, вы заканчиваетес чистым JS без помех на стороне сервера.

...