Как я ускоряю gwt компилятор?

Для будущих Googlers. У меня была та же проблема, но мне нужно было применить вариант решения Томаса Дзедзича.

У меня есть ruby 2.5.1 и rails 4.2.10, работающие в моей системе.

Как показано в , этот коммит ToSql был изменен с Arel::Visitors::Visitor на Arel::Visitors::Reduce

Так что это мое обновленное решение. В инициализаторе рельсов поместите это:

module Arel
  module Visitors
    class DepthFirst < Arel::Visitors::Visitor
      alias :visit_Integer :terminal
    end

    class Dot < Arel::Visitors::Visitor
      alias :visit_Integer :visit_String
    end

    class ToSql < Arel::Visitors::Reduce
      alias :visit_Integer :literal
    end
  end
end

200
задан Robert Harvey 19 September 2014 в 03:38
поделиться

5 ответов

Начнем с неприятной истины: производительность компилятора GWT действительно паршивая. Вы можете использовать некоторые хаки здесь и там, но вы не добьетесь значительного повышения производительности.

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

<define-property name="user.agent" values="ie6,gecko,gecko1_8"></define-property>

или в синтаксисе gwt 2.x, и только для одного браузера:

<set-property name="user.agent" value="gecko1_8"/>

Это, например, скомпилирует ваше приложение только для IE и FF. Если вы знаете, что используете только определенный браузер для тестирования, вы можете использовать этот небольшой прием.

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

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

144
ответ дан 23 November 2019 в 05:06
поделиться

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

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

62
ответ дан 23 November 2019 в 05:06
поделиться

The GWT compiler is doing a lot of code analysis so it is going to be difficult to speed it up. This session from Google IO 2008 will give you a good idea of what GWT is doing and why it does take so long.

My recommendation is for development use Hosted Mode as much as possible and then only compile when you want to do your testing. This does sound like the solution you've come to already, but basically that's why Hosted Mode is there (well, that and debugging).

You can speed up the GWT compile but only compiling for some browsers, rather than 5 kinds which GWT does by default. If you want to use Hosted Mode make sure you compile for at least two browsers; if you compile for a single browser then the browser detection code is optimised away and then Hosted Mode doesn't work any more.

An easy way to configure compiling for fewer browsers is to create a second module which inherits from your main module:

<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>

If the rename-to attribute is set the same then the output files will be same as if you did a full compile

14
ответ дан 23 November 2019 в 05:06
поделиться
  • Разделите ваше приложение на несколько модулей или точек входа и перекомпилируйте их только тогда, когда это необходимо.
  • Проанализируйте ваше приложение с помощью магистрали версия - которая предоставляет Историю вашей компиляции . Это может иметь отношение или не иметь отношения к компилятору 1.6, но может указывать на то, что происходит.
11
ответ дан 23 November 2019 в 05:06
поделиться

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

Просто включите флаг: -draftCompile в строку компилятора GWT.

55
ответ дан 23 November 2019 в 05:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: