GWT cache.js слишком большой - требуется время, чтобы приложение появилось
Мы используем инфраструктуру JBoss Errai поверх GWT для создания веб-приложений. Проблема, которую мы имеем, состоит в том, что скомпилированная версия приложения имеет размер около 10 мегабайт уже при компиляции с оптимизацией.
Есть ли способ для приложения GWT/Errai разделить или каким-либо образом показать начальные страницы еще до загрузки файла cache.js?
3 ответа
Я столкнулся с той же проблемой. Мое приложение было 8Mo большого размера, и мне удалось уменьшить его до 800ko, изменив одну из опций компиляции GWT: стиль вывода с подробного на запутанный.
Вы можете использовать механизм разделения кода.
Чтобы разделить ваш код, просто вставьте вызов метода
GWT.runAsync
в тех местах, где вы хотите, чтобы программа могла сделать паузу для загрузки большего количества кода. Эти места называются точками разделения.
Например:
public class Hello implements EntryPoint {
public void onModuleLoad() {
Button b = new Button("Click me", new ClickHandler() {
public void onClick(ClickEvent event) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable caught) {
Window.alert("Code download failed");
}
public void onSuccess() {
Window.alert("Hello, AJAX");
}
});
}
});
RootPanel.get().add(b);
}
}
... изначально загруженный код не содержит строку "Hello, AJAX" и код, необходимый для реализации Window.alert. Как только кнопка нажата, вызов GWT.runAsync будет достигнут, и этот код начнет загрузку. При условии успешной загрузки будет вызван метод onSuccess; после загрузки необходимого кода этот вызов будет выполнен успешно. В случае сбоя при загрузке кода будет вызвано onFailure.
Подробную информацию вы найдете в документации: http://www.gwtproject.org/doc/latest/DevGuideCodeSplitting.html
Если вы не хотите использовать точки разделения для фактического уменьшения начального размера полезной нагрузки, вы можете показать экран загрузки в начале, чтобы пользователь знал, по крайней мере, о том, что приложение запускается.
Это может быть легко сделано:
- добавив
div
отображение анимации загрузки ( пример) на вашей странице хоста div
должны быть добавлены до вашего<script type="text/javascript" src="app.nochache.js"></script>
тег- дать это
div
идентификатор, напр.:loading-icon
- в
onModuleLoad
метод, после*.cache.js
был загружен, удалите div, установив его вdisplay:none;
и / или удалив его из DOM