---
title: 🟠 Оптимизация обнаружения изменений
description: Задание 12 посвящено оптимизации количества циклов обнаружения изменений при прокрутке
author: thomas-laforge
contributors:
  - Dinozavvvr
challengeNumber: 12
command: performance-optimize-change-detection
sidebar:
  order: 107
---

## Информация

В Angular есть библиотека под названием <b>Zone.js</b>, которая выполняет множество магии, чтобы упростить жизнь разработчика. Zone.js монкипатчит все события DOM, чтобы перепроверить и перерисовать представление, когда что-то изменилось внутри приложения. Разработчику не нужно вручную запускать обнаружение изменений.

Однако иногда Zone.js вызывает гораздо больше обнаружения изменений, чем это необходимо. Например, когда вы прослушиваете событие прокрутки, каждое событие прокрутки вызывает новый цикл обнаружения изменений.

В этом испытании нам нужно обновлять представление только в определенной позиции прокрутки, чтобы показать или скрыть кнопку. Все остальные циклы избыточны.

Чтобы лучше понять проблему, выполните профилирование вашего приложения с помощью Angular Dev Tools.

:::note
Если вы не знаете, как это сделать, сначала прочтите [введение в производительность](/challenges/performance/).
:::

Вы можете узнать больше деталей о загрязнении зон и способах его решения [здесь](https://angular.dev/best-practices/zone-pollution).

В следующем видео более подробно объясняется проблема этого приложения.

<video controls src="https://user-images.githubusercontent.com/30832608/209819211-58d9ddcf-e1ad-4a78-8a7a-2be9d729e3f1.mov">
</video>

## Утверждение

Ваша цель в этом испытании - избежать всех избыточных циклов обнаружения изменений и запускать обнаружение изменений только при необходимости.

## Ограничение:

Вы не можете глобально отключить Zone.js. Если этот код является частью большого проекта и вы отключите Zone.js, вы без сомнения сломаете ваше приложение.
