2013-08-28 8 views
2

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

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

+0

Я не уверен, но из того, что я знаю о GWT, я собираюсь сказать «нет», это невозможно. Но вы всегда можете проверить, требуется ли jQuery (или любые другие функции) перед загрузкой, как описано здесь: http://stackoverflow.com/questions/1014203/best-way-to-use-googles-hosted -jquery-but-fall-back-to-my-hosted-library-on-go – Churro

+0

gwtquery не является библиотекой javascript 3party, это полная библиотека GWT (на самом деле переписывание jquery api в java), поэтому она нужна любая оптимизация, так как компилятор gwt избавится от неиспользуемых методов и оптимизирует весь код. Возможно, вы имели в виду jquery (вы можете отредактировать свой вопрос). Если вы импортируете gwtquery, вам не нужен jquery для использования api. Если вы используете jquery-плагины, вам нужно jquery, потому что они написаны в js, так как плагины gwtquery записываются в java. Во всяком случае, единственный способ оптимизировать бит jquery - копирование кода в блок jsni, но он не будет работать. –

ответ

1

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

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

+0

Я не слишком странно добавлять файл js где-нибудь, чтобы GWT добавлял его на этап компиляции. Вы могли бы добавить все внешние js-файлы к скомпилированному javascript-коду (из исходных файлов java), а затем позволить закрытию делать это. Так что в моей перспективе это возможно. Это просто вопрос, как добавить это js. Возможно, есть способ добавить внешний JS-код через JSNI. Но вы правы, не имеет смысла позволять GWT переписывать HTML-страницы. Вы согласны, что это возможно, но еще не реализовано? И можете ли вы использовать JSNI для добавления полного внешнего JS-файла и ожидать, что GWT удалит неиспользуемые методы? – Vjeetje

+0

Не кажется странным, если вы помните, что GWT является компилятором Java для JavaScript. GWT никогда не должен переписывать HTML-страницу, и GWT почти наверняка никогда не переписывает JS в файле модуля (что, если я загружу с другого сервера и ожидаю, что он изменится? Что делать, если я хочу использовать JS, не поддерживающий GWT, как ' 'statement? И что, если мой код использует' eval' для выполнения отражения для доступа к другому недостижимому коду?). Наконец, как сказал мой ответ, JSNI может содержать JS, но он будет оптимизирован (дополнительные методы удалены) * if * вы включаете закрытие. –