Время начальной загрузки увеличивается за счет использования стратегии предварительной загрузки в Angular.

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

В идеале модуль функций должен загружаться в фоновом режиме и не должен увеличивать время начальной загрузки.

Для предварительной загрузки я добавляю этот код в свой модуль маршрутизации.

RouterModule.forRoot(routes, {preloadingStrategy: PreloadAllModules})

В чем может быть проблема?


person Ashish Bisht    schedule 01.04.2019    source источник
comment
Да, время начальной загрузки увеличилось, но время до интерактивности, вероятно, осталось таким же, как и раньше.   -  person wentjun    schedule 01.04.2019
comment
Под временем интерактивности вы имеете в виду время взаимодействия с пользователем @wentjun? Если это верно, то нет, рендеринг блокируется до тех пор, пока не будет завершена вся компиляция. Пользователь взаимодействует после завершения компиляции.   -  person Ashish Bisht    schedule 01.04.2019
comment
Понятно ... Хм, вы все еще сталкиваетесь с этой проблемой? Раньше я сталкивался с чем-то похожим на то, с чем вы столкнулись, и решил, что разработал стратегию пользовательского загрузчика после прочтения какого-то блога в Интернете. Если хотите, я могу вставить ссылку в свой следующий комментарий.   -  person wentjun    schedule 01.04.2019


Ответы (3)


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

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

person khush    schedule 07.06.2019
comment
Да, @Khush. Когда я запустил сборку aot на сервере, я понял это. Не будет ощущения, что загружается какой-либо новый пакет. Забыл обновить здесь. Спасибо, что записали. Маркировка принято. - person Ashish Bisht; 11.06.2019

Даже у меня такая же проблема, я решил ее, удалив preloadingStrategy, кроме того, я сохраняю загрузчик при изменении маршрута в app.component. ts,

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

isLoading : boolean = false;

this.router.events.subscribe((event: Event) => {
   switch(true) {
     case event instanceof NavigationStart: {
       this.isLoading = true;
       break;
     }

     case event instanceof NavigationCancel:
     case event instanceof NavigationError:
     case event instanceof NavigationEnd: {
      this.isLoading = false;
      break;
    }
     default: {

      }
   }
 })
  • ............ Загрузка ...........
person Soumya Gangamwar    schedule 01.04.2019
comment
Для меня это время загрузки составляет около 10 секунд. Я не думаю, что удерживать пользователя на этом экране загрузки в течение 10 секунд - хорошая идея. Во всей документации говорится, что предварительная загрузка загрузит пакет в фоновом режиме без вмешательства в основной пакет. Я не знаю, что здесь не так. - person Ashish Bisht; 01.04.2019

Я создал короткое видео-объяснение того, как создать собственную стратегию предварительной загрузки - https://www.youtube.com/watch?v=tDQc3CCvKfc

и вот код - https://github.com/stevermeister/AngularPro-Screencast/tree/master/code/Season4-Router-Features/preloading

person Stepan Suvorov    schedule 28.04.2021