GWT: модуль против ClientBundle?

Я новичок в GWT, и мне трудно понять фундаментальные различия между модулем и ClientBundle. В некоторых областях документации GWT оба кажутся одним и тем же, тогда как в других областях ясно, что они не одинаковы.

Насколько я понимаю, модуль - это код на стороне клиента, который развертывается в браузерах вашего пользователя. Это ZIP-файл, содержащий HTML, CSS и JS.

Насколько я понимаю, ClientBundle похож на модуль, но он содержит только статические ресурсы, такие как изображения.

Если эти понимания верны, то почему нужно различать два? Разве HTML/CSS/JS не являются статическими ресурсами?!? И если я не в себе, пожалуйста, помогите мне понять, в чем различия, и, возможно, приведите конкретный пример каждого и когда уместно использовать каждый из них. Заранее спасибо!

1 ответ

Решение

У вас есть правильное представление о модуле - он описывает (на стороне разработки) пути к исходным файлам Java, которые нужно использовать, точки входа, с которых нужно начинать компиляцию, и различные свойства (браузеры, локали), используемые при компиляции. После компиляции модуль также представляет выходные данные - javascript и любые другие связанные скомпилированные файлы, будь то журналы, изображения, таблицы стилей и т. Д.

Напротив, ClientBundle является одним из способов, с помощью которых разработчик может сообщить компилятору, что определенные ресурсы в исходном пути java будут использоваться после компиляции. CssResource поставляется с дополнительными проверками того, что имена стилей CSS используются (и если нет, они должны быть удалены, чтобы минимизировать скомпилированный вывод), ImageResource гарантирует, что файл существует при компиляции, и оба выводят эти файлы наилучшим образом оптимизированным способом для каждого браузера. Изображения для большинства браузеров фактически включены в массивный файл JS, чтобы свести к минимуму количество обращений к серверу, а для тех, кто не поддерживает это, они автоматически объединяются в спрайты.

Объявляя интерфейс ClientBundle и вызывая GWT.create(MyClientBundle.class)вы просите компилятор разобраться со спецификой ClientBundle, чтобы сделать эти ссылочные файлы и классы доступными в вашем приложении. Как это связано с Генераторами GWT, гораздо более сложной темой, чем в SO-ответе...

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

Другие вопросы по тегам