Большие приложения в GWT: один модуль или несколько? - PullRequest
12 голосов
/ 02 декабря 2008

Чтобы обеспечить хорошие URL-адреса между частями нашего приложения, мы разбили все на несколько модулей, которые скомпилированы независимо. Например, есть часть «менеджер» и часть «редактор». Редактор запускается в новом окне. Делая это, мы можем связаться с редактором напрямую:

/com.example.EditorApp?id=1

Модуль EditorApp просто получает значение для id и загружает документ.

Проблема в том, что ВСЕ код, который является общим для двух модулей, дублируется в выходных данных. Сюда входит любой статический контент (графика), таблицы стилей и т. Д.

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

Кто-нибудь имел дело с этим? Я рассматриваю удаление отдельных модулей и объединение их обратно в одну цель компиляции. Единственным недостатком является то, что URL между нашими "приложениями" становятся примерно такими:

/com.example.MainApp?mode=editor&id=1

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

Ответы [ 3 ]

8 голосов
/ 02 декабря 2008

Я построил несколько очень больших приложений в GWT, и я считаю, что лучше всего разбить вещи на модули и переместить общий код в его собственную область, как вы сделали. Причина в нашем случае была проста, у нас были некоторые части нашего приложения, которые сильно отличались от остальных, поэтому это имело смысл с точки зрения размера компиляции. Наше приложение было собрано до 300 КБ для основного раздела и около 25-40 КБ для других разделов. Если бы мы просто поместили их все в одно, пользователь остался бы с загрузкой 600 КБ, что для нас было неприемлемо.

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

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

Еще одна незначительная вещь: я предполагаю, что вы знаете, что вам не нужно использовать пути GWT по умолчанию, которые он генерирует? Поэтому вместо com.MyPackage.Package вы можете просто поместить его в папку с хорошим именем, например, «ui» или что-то в этом роде. Однажды скомпилированный GWT не заботится о том, куда вы его поместите, и не чувствителен к изменениям пути, потому что все это запускается из одного каталога.

4 голосов
/ 22 февраля 2011

Из моего опыта создания приложений GWT есть несколько вещей, которые необходимо учитывать при принятии решения, хотите ли вы использовать несколько модулей (с или без точек входа) или все в одном: время загрузки (размер пакета Javascript), время компиляции, навигация URL и ремонтопригодность / повторное использование.

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

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

... для каждой навигации / URL может быть затруднительно переходить от одного модуля к другому (при условии разных EntryPoints), поскольку каждый модуль имеет свое собственное состояние на стороне клиента ... и навигация между модулями не является плавной .

... для удобства обслуживания / повторного использования с точки зрения организации / структуры может быть полезно разделить на отдельные модули (даже если есть только одна EntryPoint).

Я написал сообщение в блоге о с использованием модулей GWT , на случай, если это поможет.

1 голос
/ 03 декабря 2008

Хорошо. Я действительно понимаю, что на самом деле нет «правильного» ответа, потому что проекты сильно различаются. Это очень сильно зависит от характера приложения.

Наша основная сборка состоит из нескольких внутренних модулей и сторонних модулей. Все они управляются в отдельных проектах. Это имеет смысл, поскольку они используются в разных местах.

Но наличие более одного модуля в одном проекте, предназначенного для работы в качестве одного законченного приложения, кажется слишком сложным. Первоначальная причина для двух модулей состояла в том, чтобы сохранить URL простым при открытии разных экранов в новом окне. Несмотря на то, что у них было несколько целей сборки, все они используют очень большое общее подмножество кода (включая настраиваемую библиотеку XML / POJO для маршалинга).

О размере ... для нас один модуль был 280 КБ, а другой чуть более 300 КБ.

Я только что закончил объединять все обратно в один модуль. Новый комбинированный модуль составляет около 380 КБ. Так что на самом деле скачивать немного меньше, так как большинство пользователей используют оба экрана.

Также помните, что кеширование идеально, поэтому 380КБ следует загружать только один раз, если только приложение не было изменено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...