#angular
Вопрос:
Представьте, что я использую ngIf для визуализации (или создания) компонента и переключаюсь между компонентами на основе ngIf (или ngSwitch). Независимо от проблем с шаблоном (хотя я думаю, что лучше использовать маршрутизатор при переключении между компонентами), в случае производительности будет ли какой-либо прирост производительности, если я буду использовать розетки маршрутизатора вместо блоков ngIf (или наоборот)?
Визуализация
использование ngIf
<ng-container *ngIf="condition === a">
<a-component></a-component>
</ng-container>
<ng-container *ngIf="condition === b">
<b-component></b-component>
</ng-container>
использование маршрутизатора-розетки
<router-outlet></router-outlet>
Ответ №1:
Это зависит от компонента, в любом случае(розетка маршрутизатора или ngIf) компонент создается и уничтожается.
Если ваш компонент тяжелый, то слишком частое переключение между компонентами может привести к проблемам с производительностью.
Кстати, с тяжелым я имею в виду потребление памяти javascript и перекраску DOM.
Проблем с памятью можно избежать, просто убедитесь, что у вас нет утечек памяти, но перекраски DOM не избежать, если вы слишком часто меняете DOM, тогда возникнут проблемы с производительностью.
Одним из решений, позволяющих избежать перекраски DOM, является использование hidden
вместо ngIf
.
Комментарии:
1. Да, как я знаю, ngIf напрямую удаляет блок из дерева DOM, в этих случаях иногда скрытое свойство становится более эффективным. Я думаю, что между маршрутизатором и ngIf нет существенной разницы в производительности.
Ответ №2:
<router-outlet>
работает с использованием модуля RouterModule, что практически означает, что URL-адреса будут теми, которые выберут необходимый компонент для визуализации.
Это не одно и то же. При использовании ngIf URL-адрес вообще не изменится, и рабочий процесс будет совершенно другим.
Комментарии:
1. Да, я согласен. Но мой вопрос в том, есть ли прирост производительности при использовании розетки маршрутизатора (при переключении между компонентами)?
Ответ №3:
Интересный вопрос, я работаю с Angular уже почти год, и это мое мнение:
Что выбрать и почему:
- Я думаю, это лишь вопрос того, насколько большой элемент, который вы пытаетесь скрыть и отображать, если его является для электронной.г контейнер с некоторым содержанием или карты,
*ngIf
имеет больше смысла, если его большая составляющая с множеством элементов и функций, работающих через него, возможно, есть дочерние компоненты, с помощью угловой маршрутизации имеет больше смысла, в основном из-за структуры разницы, как кто-то выше упомянул, угловой маршрутизации организует ваши компоненты очень хорошо в вашем приложении. Использование*ngIf
для больших компонентов всегда будет грязным.
Есть ли разница в производительности?:
- Это зависит от того, какой метод маршрутизации вы используете, по умолчанию угловой загружает все ваши компоненты немедленно, и таким образом может возникнуть разница в производительности. Однако, если вы используете их метод маршрутизации с отложенной загрузкой для загрузки ваших компонентов, компоненты не загружаются до тех пор, пока по вашей команде не будет вызван модуль, который их содержит, и в этом случае между ними не будет разницы в производительности.
Проверьте ленивую загрузку docx здесь: https://angular.io/guide/lazy-loading-ngmodules
Надеюсь, это помогло
Комментарии:
1. Я использую ленивую загрузку в нескольких местах своего приложения, но я думаю, что ленивая загрузка приведет только к более быстрой инициализации страницы. Кроме того, создание модулей для блоков просмотра на странице не является хорошим шаблоном для решения проблем (личное мнение). Насколько я вижу, при переключении между страницами нет существенной разницы в производительности между использованием ngIf и маршрутизатором. Спасибо за ваш ответ!