1. Принцип единой ответственности
  2. Делайте все по мелочам
  3. Избегайте конфликтов имен модулей, используйте уникальные соглашения об именах с подмодулями
  4. Используйте принцип LIFT (Найдите, определите, ровно и оставайтесь СУХИМ)
  5. По возможности используйте одноразовую привязку
  6. Никаких повторений в больших списках (используйте bind-html)
  7. Нет ng-show / ng-hide, используйте ng-if / ng-switch
  8. Не использовать фильтр для ng-repeat, использовать фильтр для компонентов
  9. При необходимости определяйте уничтожение, не оставляйте
  10. Используйте веб-воркеры для визуализации больших наборов данных
  11. Используйте модель оболочки приложения для мобильных приложений
  12. Используйте Lodash

Советы по оптимизации кода:

Анализируйте исходные карты: используйте анализатор пакетов веб-пакетов или проводник исходных карт, чтобы получить представление о созданных пакетах. Они могут помочь в поиске нежелательных зависимостей или зависимостей, которых можно избежать.

Сосредоточьтесь на этих двух: Tree Shaking и AOT. AOT сделает ваше приложение более быстрым по сравнению с JIT, более безопасным и компактным, а также позволит выявлять ошибки во время компиляции и сокращать количество асинхронных вызовов таблиц стилей. Встряхивание и минимизация дерева позволяет нам избавиться от нежелательных зависимостей из пакета.

Избегайте вычисления значений в шаблоне:. Если значения не будут меняться динамически, будет дороже выполнить преобразование в шаблонах пользовательского интерфейса. Попробуйте использовать чистые каналы или используйте новое значение свойства, чтобы установить значение, равное единице.

Используйте обнаружение изменений с умом: Angular широко использует обнаружение изменений в дереве DOM, и будет разумной идеей отключить обнаружение изменений компонентов, что требует частых обновлений и использования местная стратегия.

Используйте неизменяемые или наблюдаемые входные объекты для стратегии onPush: стратегия OnPush ограничивает стратегию обнаружения изменений только

когда в компоненте запускается обработчик событий
при изменении одного из его входных свойств
когда вы вручную запрашиваете детектор изменений для поиска изменений
при запуске детектора изменений дочернего элемента

Использование неизменяемого или наблюдаемого ввода помогает со стратегиями OnPush, поскольку детектор изменений не запускается, когда что-то внутри объекта изменяется, и он будет работать сверху вниз