Остановить загрузку компонентов на полпути

Я создал приложение, используя angular 7, которое очень интенсивно работает в браузере и имеет много тяжелых компонентов. Всякий раз, когда я перехожу от полузагруженного компонента к другому компоненту, требуется некоторое время. Мой вопрос: могу ли я как-то остановить инициализацию загружаемого в данный момент компонента и начать инициализацию следующего компонента?

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

Это очень открытый вопрос. Что это за тяжелая инициализация, которую вы делаете? Он состоит из асинхронных операций, таких как HTTP-запросы? Это обработка данных? Вы можете прерывать асинхронные операции. Однако JavaScript является однопоточным и не может быть прерван. В этом случае вам может понадобиться изучить рабочие потоки.

cristian.t 09.04.2019 07:45

Он состоит из нескольких асинхронных вызовов и обработки данных. Кроме того, он рисует холст с использованием SVG, отсюда и отставание.

Zeeshan Mahmood 09.04.2019 07:53
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
2
46
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для асинхронных операций я бы обязательно использовал Observables и отписался от них, чтобы прервать их работу. См. https://angular.io/guide/comparing-observables#cancellation

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

Редактировать: для холста также есть экспериментальный API, OffscreenCanvas, который позволяет вам выполнять операции рисования внутри веб-воркеров. См. https://developer.mozilla.org/en-US/docs/Web/API/OffscreenCanvas

Однако, если вы решите не использовать веб-воркеры или OffscreenCanvas, я думаю, все, что вы можете сделать, это оптимизировать способ использования холста. Если вы разумно используете window.requestAnimationFrame(), выполняя небольшие пакеты операций в каждом кадре, я думаю, вы можете построить процесс рисования, который будет меньше влиять на основной поток и может быть прерван.

https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Оптимизация_canvas

Другие вопросы по теме