Фрагменты загрузки GWT после запуска приложения

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

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

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

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

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

Вкратце:
я хочу, чтобы моя первоначальная загрузка оставалась 570 КБ, а остальная часть приложения загружалась как можно скорее в фоновом режиме (если возможно).

РЕДАКТИРОВАТЬ: я нашел http://www.gwtproject.org/doc/latest/DevGuideCodeSplitting.html#sequence, где вы можете настроить начальную последовательность загрузки, так что я думаю, это то, что я ищу. Не уверен, что они загружаются асинхронно, потому что экран входа в систему появляется после загрузки фрагментов.


person Zdeněk Braun    schedule 13.09.2016    source источник


Ответы (1)


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

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

person Andrei Volgin    schedule 13.09.2016
comment
Исключение входа в систему, вероятно, будет лучшим вариантом. Однако я просто реализовал его, используя последовательность начальной загрузки. Я получил: Полный размер кода: 1 183 891 байт, начальный размер загрузки: 574 846 байт, оставшийся код: 11 байт. Но когда я проверяю вкладку сети в консоли разработчика Chrome, загружается основной js-файл с хешем размером 570 КБ, но затем загружается 1.cache.js (~ 500 КБ) и, наконец, после этого отображается экран входа в систему. Почему он так себя ведет, когда говорит, что осталось только 11B? Я проведу рефакторинг своего приложения, чтобы разделить логин, но мне было интересно об этом .... - person Zdeněk Braun; 15.09.2016
comment
Последовательность загрузки следующая: начальная загрузка + начальный фрагмент (ы) + оставшийся фрагмент. Затем есть эксклюзивные фрагменты, которые загружаются по запросу. Важно аккуратно разделить код на эти эксклюзивные фрагменты. Компилятор очень старается оптимизировать ваш код, удаляя любой повторяющийся код. Вы можете проверить отчет о компиляции, чтобы увидеть, какие зависимости привели к включению классов в каждый фрагмент. - person Andrei Volgin; 15.09.2016
comment
Хорошо, я наконец отредактировал свое приложение, и сначала загружается только логин. После нажатия кнопки входа в систему загружается остальная часть приложения, и это хорошо. Было бы неплохо показать обратную связь пользователя при загрузке остального (на экране отображается загрузка, и есть вращающиеся стрелки, указывающие, что он что-то делает). Можно ли отобразить имя файла, который в данный момент загружается? Некоторая функция GWT, которая показывает, какой фрагмент загружается в данный момент. Пытался погуглить, но пока ничего не нашел .... Но это по теме .... ty - person Zdeněk Braun; 15.09.2016