widgets - что такое gwt java




Как ускорить компилятор gwt? (7)

Мы начинаем более активно использовать GWT в наших проектах, а производительность компилятора GWT становится все более раздражающей.

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

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

Мы в настоящее время вызываем com.google.gwt.dev.Compiler как приложение java из Ant Ant-цели, с максимальной емкостью 256m и большим количеством стеков. Компилятор запускается Ant, используя fork = true и последнюю версию Java 6 JRE, чтобы попытаться воспользоваться улучшенной производительностью Java6. Мы передаем наш основной класс контроллера компилятору вместе с путём класса приложения и от него.

Что еще мы можем сделать, чтобы получить дополнительную скорость? Можем ли мы дать ему больше информации, чтобы тратить меньше времени на открытие того, что делать?

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

Все предложения приветствуются на этом этапе.


В более новых версиях GWT (начиная с 2.3 или 2.4, я считаю) вы также можете добавить

<collapse-all-properties />

к вашему gwt.xml для целей развития. Это скажет компилятору GWT создать единую перестановку, которая охватывает все локали и браузеры. Таким образом, вы все еще можете тестировать во всех браузерах и языках, но по-прежнему составляете только одну перестановку


Вы можете добавить один вариант своей сборки для производства:

-localWorkers 8 - Где 8 - количество параллельных потоков, которые вычисляют перестановки. Все, что вам нужно сделать, - это настроить этот номер на более удобный для вас номер. См. Производительность компиляции GWT (спасибо комментарию Денниса Ich).

Если вы компилируете среду тестирования, вы также можете использовать:

-draftCompile который обеспечивает более быструю, но менее оптимизированную компиляцию

-optimize 0 который не оптимизирует ваш код (9 - максимальное значение оптимизации)

Еще одна вещь, которая более чем удвоила производительность сборки и размещения в режиме реального времени, - это использование SSD-диска (теперь hostmode работает как шарм). Это не дешевое решение, но в зависимости от того, насколько вы используете GWT и стоимость вашего времени, это может стоить того!

Надеюсь, это поможет вам!


Если вы запустите компилятор GWT с флагом -localWorkers, компилятор будет скомпилировать несколько перестановок параллельно. Это позволяет использовать все ядра многоядерной машины, например -localWorkers 2 сообщит компилятору, что он будет выполнять компиляцию двух перестановок параллельно. Вы не получите порядок разностей величин (не все в компиляторе параллелизуемо), но это все же примечательное ускорение, если вы компилируете несколько перестановок.

Если вы захотите использовать магистральную версию GWT, вы сможете использовать режим размещения для любого браузера ( вне режима работы в хостинге ), что облегчает большинство текущих проблем в режиме размещения. Кажется, именно там, где идет GWT, всегда развивается в режиме размещения, так как компиляции вряд ли будут получать величины быстрее.


Компилятор GWT проводит много анализа кода, поэтому его будет сложно ускорить. Этот сеанс из Google IO 2008 даст вам хорошее представление о том, что делает GWT и почему он так долго.

Моя рекомендация заключается в том, чтобы вы максимально использовали Hosted Mode, а затем только компилируете, когда хотите провести тестирование. Это похоже на решение, к которому вы уже пришли, но в основном именно поэтому Hosted Mode (ну, это и отладка).

Вы можете ускорить компиляцию GWT, но только компиляцию для некоторых браузеров, а не 5 видов, которые GWT делает по умолчанию. Если вы хотите использовать Hosted Mode, убедитесь, что вы компилируете, по крайней мере, два браузера; если вы компилируете для одного браузера, тогда код обнаружения браузера оптимизируется, а затем режим Hosted Mode больше не работает.

Простым способом настройки компиляции для меньшего количества браузеров является создание второго модуля, который наследуется от вашего основного модуля:

<module rename-to="myproject">
  <inherits name="com.mycompany.MyProject"/>
  <!-- Compile for IE and Chrome -->
  <!-- If you compile for only one browser, the browser detection javascript
       is optimised away and then Hosted Mode doesn't work -->
  <set-property name="user.agent" value="ie6,safari"/>
</module>

Если атрибут rename-to устанавливается одинаковым, выходные файлы будут такими же, как если бы вы выполнили полную компиляцию



Хотя эта запись довольно старая, и большинство из вас, вероятно, уже знают, я думаю, стоит упомянуть, что GWT 2.x включает новый флаг компиляции, который ускоряет компиляцию, пропуская оптимизацию. Вы определенно не должны развертывать JavaScript, скомпилированный таким образом, но это может быть экономией времени во время непроизводственных непрерывных сборок.

Просто добавьте флаг: -draftCompile к вашей линии компилятора GWT.


  • Разделите приложение на несколько модулей или точек входа и перекомпилируйте его только тогда, когда это необходимо.
  • Проанализируйте свое приложение, используя версию trunk, которая предоставляет Историю вашего компиляции . Это может быть или не иметь отношения к компилятору 1.6, но может указывать на то, что происходит.




gwt