Чеклист оптимизации фронтенда
Сводный чеклист по материалам раздела «Оптимизация фронтенда» и «Использование браузерных API». Используйте его на этапе разработки и при код-ревью продуктов на Q.Palette.
Сквозное правило для всех разделов: каждая подписка (valueChanges, interval, fromEvent, SSE) должна завершаться через takeUntil(this.destroy$), а в компоненте должен быть реализован ngOnDestroy с destroy$.next() и destroy$.complete(). В пунктах ниже это явно не повторяется.
1. Перерисовка фильтров таблиц
Применяется ко всем *ngFor / @for по фильтрам, особенно в связке с p-columnFilter, p-dropdown, p-calendar.
См. также: Перерисовка всех фильтров при изменении одного.
2. Фильтры на базе q-lookup
Применяется ко всем формам и фильтрам с q-lookup или аналогичным компонентом с автозаполнением.
См. также: Избыточные запросы при изменении значений лукапа.
distinctUntilChanged без предварительного map бесполезен: объекты сравниваются по ссылке, и каждое изменение считается новым.
3. Поллинг
Из-за вкладочной архитектуры Q.Palette неконтролируемый поллинг быстро превращается в десятки и сотни запросов в минуту.
См. также: Рекомендации по использованию поллинга и SSE-клиент.
10 открытых вкладок с поллингом каждые 5 секунд = 120 запросов в минуту только от одного пользователя. Всегда оценивайте суммарную нагрузку.
4. Браузерные API
Применяется к коду, напрямую работающему с DOM, событиями, наблюдателями и таймерами.
См. также: Осторожное использование браузерных API.
Layout Thrashing
Слушатели событий
Наблюдатели
Работа с DOM и таймерами
5. CSS и анимации
Чем дешевле эффект для браузера, тем плавнее работает интерфейс. Цель — оставлять браузеру только этап Composite, минуя Layout и Paint.
Что анимировать
Дорогие CSS-свойства
Изоляция и подсказки браузеру
Длинные и фоновые анимации