Как ускорить приложение с помощью гибрида ui-router, используя downgradeModule()
Я использую гибрид "ui-router" ( https://github.com/ui-router/angular-hybrid), загрузив его "классическим" способом.
У нас возникают проблемы с производительностью при "зависании" и других событиях, заметных в сетках данных. Мы думаем, что это связано с перекрытием / умножением обнаружения изменений между двумя версиями, описанными здесь.
https://pr18487-aedf0aa.ngbuilds.io/guide/upgrade-performance
Я пытаюсь использовать метод начальной загрузки downgradeModule(), описанный в приведенном выше документе, для решения проблемы производительности, но не смог.
Не может быть начальной загрузки модуля Angular, но без ошибок. Вот как я это делаю. Кнопка контактов (Угловой модуль) ничего не делает.
https://stackblitz.com/edit/github-ypge8f-jmshp3
Я также попытался загрузить непосредственно угловой модуль "Contacts" (приложение "lazyload" "Contacts" и подумал, что это может быть проблемой), но результат тот же. Этот вопрос также размещен здесь
1 ответ
После долгой борьбы с этим, я думаю, я наконец понял это. UI-маршрутизатор усложняет решение этой проблемы, поскольку во всех примерах Angular Hybrid, использующих downgradeModule, используется встроенный маршрутизатор. Обновил код, чтобы он работал: https://stackblitz.com/edit/github-ypge8f-jmshp3 Уловки были:
- Модуль Angular начальной загрузки нуждался в параметре типа "UIRouter" в конструкторе, иначе он не загрузил бы его состояния:
export class AppModule {
constructor(private router: UIRouter) {
// "router" needed in constructor to bootstrap angular states
}
UrlService должен быть остановлен до начальной загрузки и перезапущен после, как в обычном гибридном примере
Перезапуск urlService должен происходить при вызове setTimeout (не удалось найти лучший способ перехватить это действие), чтобы позволить угловым состояниям загружаться при перезагрузке страницы с URL из одного из этих состояний.
setTimeout(() => {
// setTimeout needed to allow angular routes to initialize after refresh
urlService.listen();
urlService.sync();
});