А что случилось?
мне такой вопрос задали
Скажите, что не знаете)
так ответа нет что ли😁
Нужно начать с измерений, без них вы не сможете узнать, что оптимизация сработала. В зависимости от того, где именно проблема, есть разные пути оптимизации. Обычно нужно либо сократить количество вызовов CD, либо ускорить сам CD, для первого подходит OnPush и дальше, если не помогло, вынос частых событий из зоны. Для второго - проверить что именно внутри CD тормозит, геттеры, пайпы, что-то еще. Мемоизировать или переписать логику
trackby ещё, т.е. ненужные модификации дома
обычно не должно лагать, если не юзать геттеры для получения данных в шаблонах и использовать OnPush в ресурсоемких местах. Можно локально выносить часть компоненты в новую и делать ее OnPush, чтобы не делать всю компоненту OnPush. Через профайлер хрома можно узнать что нужно оптимизировать
Геттеры дают сильную нагрузку?
угу, иногда до полного зависания приложения
да ну неужели, могут быть ситуации когда что-то вроде ngIf="isActive()" и isActive постоянно заставляет пересоздаваться компонент меняясь как flip-flop. У меня с каким-то редактором WYSYWIG было
Тут нет геттера, тут вызов метода и хреновый компонент, скорее всего
а isActive() по твоему что ?
а геттер это не метод ?
Метод, но не каждый метод - геттер
так я тебе написал что мой метод геттер, как ты не зная его реализации решил что он не геттер ?
а ты думаешь ангуляр обрабатывает как-то по другому если это геттер или метод ?
Нет, так же. Но один плохой пример не значит, что нельзя пользоваться геттерами
ими нельзя пользоваться в шаблонах, те кто пользуются плохо знают ангуляр либо мало опыта
а если isActive всегда тру возвращает во время жизни компонента то в чём тут может быть проблема?
как? пример пожалуйста
Может из полей?
ну вот например у тебя есть геттер isUserActive в сервисе. Потом юзер перестает быть active, а метод по прежнему возвращает true, потому что не было change detection
У него геттер видимо возвращает что то не зависимое от input'ов
а поля не переменные ?
а если isUserActive заменить на поле то всё станет збс?
желательно на реактивную
вопросов больше не имею
есть возражения ?
эм... смотря что вы в этот геттер напихали
ну с таким подходом можно вообще на все забить, и просто говорить джунам "делай правильно" без уточнения
ну если вы в геттер положили итерацию по массиву с миллионом значений, то фликерить начнет заметно сразу
Геттеры не дают никакой нагрузки, кроме той, что внутри них. Если вы там не аллоцируете объекты в памяти и не итерируетесь по огромным массивам, то не заметите разницы
а то что компонент перерендеривается - это "никакая нагрузка" ?
Обсуждают сегодня