Оптимизирует ли GWT встроенный javascript?

Хорошо известно, что GWT компилирует исходный код Java в оптимизированный Javascript. Например, он удалит все неиспользуемые функции. Это полезно, если вы используете стороннюю библиотеку, такую ​​как gwtQuery.

Интересно, есть ли способ позволить GWT также оптимизировать Javascript, который вы встраиваете в HTML-страницу с помощью тега <script>. Например, вместо того, чтобы позволить пользователю загрузить полную библиотеку JQuery Javascript, загрузите только несколько используемых функций.


person Vjeetje    schedule 28.08.2013    source источник
comment
Я не уверен, но из того, что я знаю о GWT, я скажу, что это невозможно. Но вы всегда можете проверить, нужен ли jQuery (или любые другие функции, которые у вас есть), перед его загрузкой, как описано здесь: stackoverflow.com /вопросы/1014203/   -  person Churro    schedule 29.08.2013
comment
gwtquery НЕ является сторонней библиотекой javascript, это полная библиотека GWT (фактически переписанный jquery api в java), поэтому она нуждается в какой-либо оптимизации, поскольку компилятор gwt избавится от неиспользуемых методов и оптимизирует весь код. Возможно, вы имели в виду jquery (вы можете отредактировать свой вопрос). Если вы импортируете gwtquery, вам не нужен jquery для использования API. Очевидно, вам нужен jquery, если вы используете плагины jquery, потому что они написаны на js, так как плагины gwtquery написаны на java. В любом случае, единственный способ немного оптимизировать jquery — это скопировать код в блок jsni, но это не сработает.   -  person Manolo Carrasco Moñino    schedule 29.08.2013


Ответы (1)


Если вы говорите о дополнительных тегах <script>, которые вы добавляете на страницу, ответ будет отрицательным — как это могло быть? Вы добавляете эти теги на html-страницу, и GWT не может узнать, что они будут собой представлять, или изменить их происхождение, по крайней мере, без перезаписи самого html-файла (и GWT не так делает свою работу). Работа).

Если вы говорите о включении JS в метод JSNI в вашем приложении, то ответ будет "вроде" или "это зависит". При использовании GWT 2.4 или более ранней версии выполняются лишь очень ограниченные оптимизации, такие как интернирование строк и встраивание очень простых методов. Если вы используете GWT 2.5 или более позднюю версию и у вас включен параметр Closure Compiler, то Closure изменит весь исходный код в скомпилированном выводе, включая методы JSNI. Обратите внимание, что эта оптимизация может нарушить некоторые исходные коды JS, если они не разработаны с учетом замыкания.

person Colin Alworth    schedule 29.08.2013
comment
Мне не кажется странным добавить файл js куда-нибудь, чтобы GWT добавил его на этапе компиляции. Вы можете добавить все внешние файлы js в скомпилированный код javascript (из исходных файлов java), а затем позволить закрытию сделать это. Так что с моей точки зрения это возможно. Вопрос только в том, как добавить этот js. Возможно, есть способ добавить внешний JS-код через JSNI. Но вы правы, не имеет смысла позволять GWT переписывать HTML-страницы. Вы согласны, что это возможно, но еще не реализовано? И можете ли вы использовать JSNI для добавления полного внешнего JS-файла и ожидать, что GWT удалит неиспользуемые методы? - person Vjeetje; 29.08.2013
comment
Это не кажется странным, если вы помните, что GWT — это компилятор Java в JavaScript. GWT никогда не должен переписывать HTML-страницу, и GWT почти наверняка никогда не должен переписывать JS в файле модуля (что, если я загружусь с другого сервера и ожидаю, что он изменится? Что, если я хочу использовать JS, не поддерживающий GWT, например оператор with А что, если мой код использует eval для выполнения отражения для доступа к коду, который иначе недостижим?). Наконец, как сказано в моем ответе, JSNI может содержать JS, но он будет оптимизирован (удалены дополнительные методы) только если вы включите закрытие. - person Colin Alworth; 29.08.2013