Я работаю над проектом Angular, который содержит 24 модуля, и в соответствии с требованиями заказчика всегда вносятся изменения в код.
У нас в руках 2 подхода
Использование объекта с ключами непосредственно в самом шаблоне.
Пример кода выглядит следующим образом: {{object? .Property1? .Property2}}
Я написал трубу, которая принимает объект и путь для получения значения. Я сохранил значение пути в константе. В будущем мы хотим извлечь эти константы из базы данных.
Пример кода выглядит так: {{object | deepFind: PROPERTY1_PROPERTY2_PATH}}
Здесь PROPERTY1_PROPERTY2_PATH является константой и содержит значение 'property1.property2';
Я написал образец в stackblitz
https://stackblitz.com/edit/angular-jsqhk4
Я пытался проверить разницу в производительности между этими двумя подходами, но я не нашел никакой разницы во времени рендеринга.
Я пытался использовать вкладку производительности Chrome Dev Tools, а метод deepfind занял 7 мс.
Мне не удалось понять, за какой подход нам нужно проголосовать?
<ul>
<!-- Approach 1 -->
<li *ngFor="let widget of serverResponse.widgets">
{{ widget?.title }}
</li>
<!-- Approach 2 -->
<li *ngFor="let widget of serverResponse | deepFind: WIDGET_CONSTANTS?.WIDGETS_LIST">
{{ widget | deepFind: WIDGET_CONSTANTS?.WIDGET_HEADING }}
</li>
</ul>
У меня есть несколько вопросов по этой проблеме
- Я не нашел способа рассчитать производительность рендеринга угловых шаблонов. Итак, я попробовал наивный подход, чтобы проверить снизу вверх и посмотреть, какова производительность трубы. Пожалуйста, предложите мне способ проверить производительность для расчета углового рендеринга шаблона 2.
- Я знаю, что это должна быть нечистая труба. Какое снижение производительности при использовании большего количества каналов в шаблоне, чем при использовании жестко закодированных свойств объекта? Потому что здесь только я показал только 2 трубы, но в моем проекте это более чем в 100 раз.
- Каким будет лучший подход к этому делу для будущего обслуживания, читаемости кода и стандартного способа решения этой проблемы?
- Я знаю, что я передаю объекты в канал, что влияет на производительность по сравнению с передачей примитивного значения?
- Мы также нигде не прописываем ключи объекта в файле ts. Мне нужно лучшее решение, чтобы иметь решение для шаблона и файла ts.
- Каковы другие подходы к вышеуказанной проблеме?