#angular #performance #angular-routing
#угловой #Производительность #angular-routing
Вопрос:
Я хочу, чтобы несколько маршрутов указывали на один и тот же компонент, чтобы я мог изменить поведение компонента по умолчанию.
{ path: 'city/:zipCode/:cityState', component: JobSearchComponent },
{ path: 'company/:organizationId/:companyName', component: JobSearchComponent }
Есть ли какое-либо снижение производительности из-за того, что несколько маршрутов указывают на один компонент, например, несколько экземпляров в памяти во время выполнения или что-то еще?
Комментарии:
1. Я не думаю, что это приведет к снижению эффективности, какая ситуация заставит вас почувствовать, что это снизит эффективность?
2. @ChunbinLi, я не уверен. Если бы один из создателей Angular посмотрел на это, подумал бы он: «конечно, это нормально», или они подумали бы «о боже, не делай этого» по какой-то причине? Возможно, Angular создает экземпляр компонента для каждого маршрута и занимает больше памяти. Возможно, это может привести к дублированию кода при компиляции. Я просто не знаю, является ли это допустимым шаблоном, отсюда и вопрос.
Ответ №1:
Это не окажет существенного влияния, поскольку Angular создает экземпляр компонента только тогда, когда маршрут активен.
Именно по этой причине методы жизненного цикла вызываются для компонента с активным маршрутом. Мы можем подтвердить это с помощью простых методов, таких как ngOnInit
и ngOnDestroy
.
Внутренне способ работы маршрутизатора аналогичен добавлению этих компонентов в entryComponents
массив. Таким образом, даже если маршрут будет активирован позже во время выполнения, компилятор angular знает, что нужно включить их в сборку.
Еще одна вещь, которую следует помнить, это то, что Angular выполняет первичное сопоставление маршрутов в массиве маршрутизаторов, начиная с корня. Следовательно, порядок, в котором мы добавляем маршруты, важен. Распространенным примером этого является то, что мы часто объявляем not-found
или несоответствующие, т. Е. **
пути в конце массива маршрутов.
Из документации Angular @ https://angular.io/guide/router#configuration:
Порядок маршрутов в конфигурации имеет значение, и это предусмотрено проектом. Маршрутизатор использует стратегию выигрыша при первом совпадении при сопоставлении маршрутов, поэтому более конкретные маршруты следует размещать над менее конкретными маршрутами. В приведенной выше конфигурации сначала перечислены маршруты со статическим путем, за которыми следует пустой путь, который соответствует маршруту по умолчанию. Маршрут с подстановочным знаком идет последним, потому что он соответствует каждому URL-адресу и должен выбираться только в том случае, если сначала не сопоставлены другие маршруты.
Учитывая вышесказанное, единственной производительностью будет O (N) для сопоставления путей.