2016-09-13 3 views
0

Я создаю приложение в GWT, и я только что недавно реализовал кодовое разделение. Я уменьшил размер приложения с 1,1 МБ до 570 кБ, что приятно, поэтому время запуска приложения стало быстрее (мы используем специальный сервер, на котором 500 КБ действительно имеет значение ... не важно для моего вопроса, хотя ...). После запуска приложения (другими словами, пользователь может увидеть страницу входа в систему, войти в систему и использовать основные части приложения), я хотел бы загрузить остальные фрагменты.Фрагменты загрузки GWT после запуска приложения

Я знаю, что фрагмент будет загружен, когда потребуется код в фрагменте. Но один из фрагментов - около 300 КБ. Поэтому, когда я нажимаю в меню своего приложения на предмет, который заставляет этот фрагмент загружаться, есть очень заметная задержка (1 - 2 с), прежде чем пользователь получит ответ.

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

Мне просто нужно быть уверенным, что когда пользователь запускает мое приложение на телефоне/планшете, используя Wi-Fi, затем отключается от Wi-Fi или выходит из своего диапазона, он все равно сможет запустить код в фрагментах, даже если он не запускает то, что вызывает их загрузку, пока он все еще подключен к серверу.

Теперь ему нужно будет открыть 3 пункта меню, чтобы загрузить все фрагменты, которые раздражают.

Так короче:
Я хочу, чтобы мой начальной загрузки, чтобы остаться 570kB и загрузить остальные приложения как можно скорее на фоне (если это возможно).

EDIT: Я нашел http://www.gwtproject.org/doc/latest/DevGuideCodeSplitting.html#sequence, где вы можете настроить начальную последовательность загрузки, поэтому я думаю, что это то, что я ищу. Не уверен, хотя если они загружаются асинхронно, потому что экран входа появляется после загрузки фрагментов.

ответ

1

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

Кроме того, если вы планируете загружать весь код таким образом, вам нужно всего лишь разделить один фрагмент - точку входа с панелью входа. Каждая точка разделения (a) немного увеличивает общий размер приложения и (b) увеличивает, иногда значительно, размер оставшегося фрагмента, который все еще необходимо загрузить для отображения первого фрагмента. Таким образом, нет смысла иметь больше, чем исходный фрагмент и остальную часть приложения, учитывая ваши требования.

+0

Исключая логин, вероятно, будет лучшим вариантом. Однако я только что реализовал его, используя «начальную последовательность загрузки». Я получил: Полный размер кода: 1 183 891 Bytes, Начальный размер загрузки: 574 846 Bytes, Оставленный код: 11 Bytes. Но когда я проверяю вкладку сети в консоли разработчика Chrome, загружается 570kB «hashname main js file», но затем загружается 1.cache.js (~ 500 КБ) и, наконец, после этого выводится экран входа в систему. Почему это действует так, когда говорится, что осталось только 11B? Я буду реорганизовывать мое приложение, чтобы отделить логин, но было просто интересно об этом .... –

+0

Последовательность загрузки: начальная загрузка + исходный фрагмент (ы) + остаточный фрагмент. Затем есть «эксклюзивные» фрагменты, которые загружаются по требованию. Важно тщательно отделить код от этих «эксклюзивных» фрагментов. Компилятор очень сильно пытается оптимизировать ваш код, исключив любой дубликат кода. Вы можете проверить отчет компиляции, чтобы узнать, какие зависимости вызывали классы, которые должны быть включены в каждый фрагмент. –

+0

ОК, я, наконец, реорганизовал свое приложение, и сначала загружен только вход в систему. После нажатия кнопки входа в систему загружается остальная часть приложения, что приятно.Было бы неплохо показать обратную связь с пользователем при загрузке остальных (экран говорит о загрузке, и есть вращающиеся стрелки, указывающие, что он что-то делает). Можно ли отображать имя файла, который в настоящее время загружается? Некоторая функция GWT, которая показывает, какой фрагмент загружается в настоящий момент. Пробовал немного погулять, но ничего не нашел до сих пор ... Это тема, хотя .... ty –