Мы уже там (Шрек 2)

Если вы смотрели фильм (Шрек 2), вы, вероятно, знакомы с той частью, где осел раздражает Шрека, спрашивая: «Мы уже здесь?» много раз. Что ж… иногда ваша функция может раздражать не меньше, чем осел, но, к счастью, у нас есть решение.

Проблема

Представьте, что после запроса API у вас есть массив из 500 000 пользовательских объектов.

Теперь вы хотите реализовать функцию поиска, которая может искать пользователей в массиве по имени, телефону, электронной почте и некоторым другим параметрам. у вас будет какая-то тяжелая функция, которая будет работать со всем массивом и возвращать вам новый отфильтрованный массив с отфильтрованными пользователями для отображения на экране.

В результате мы получаем плохую производительность, потому что любое нажатие клавиши пользователем вызовет тяжелую функцию и замедлит его браузер. (Поиск Johny заставляет нас запускать функцию 10 раз)

Решение — отказ

Debounce — это функция, которая принимает другую функцию в качестве параметра, оборачивает эту функцию в замыкание и возвращает новую функцию для реализации поведения «подождать немного», поэтому функция срабатывает через определенный период времени и может быть отменена или возобновлена. .

Разбивка функций

Функция useDebounce принимает 2 параметра.

func: универсальная функция, которая принимает любые аргументы и может возвращать любой тип.

waitFor: количество миллисекунд ожидания до выполнения функции (func)

Функция setTimeout — это встроенная функция, которая «работает в фоновом режиме» и ожидает заданное время до выполнения. Она возвращает число, поэтому мы можем использовать функцию clearTimeout, которая убьет эту задачу перед выполнением. Затем мы возвращаем новую обернутую debounce-функцию. так что в основном то, что мы делаем здесь, вызывает функцию debounce, и с каждым вызовом мы останавливаем предыдущий тайм-аут и создаем новый.

Теперь мы можем использовать функцию useDebounce в нашем проекте:

Краткое содержание

Debounce — отличный способ повысить производительность вашего проекта, особенно если в нем задействован бэкэнд. Теперь, обладая этими знаниями, вы можете с легкостью внедрить функцию устранения дребезга в любом месте!

Надеюсь, вам понравилась статья. Следите за обновлениями :)