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

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

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

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

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

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

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