Throttling

Throttling - это обертка для любой функции, которое ограничивает количество вызовов функции за заданный промежуток времени. Например throttling(todo, 1000) должно запускать функцию todo раз в 1000 миллисекунд. Но с двумя важными особенностями.

Если запросы на выполнение функции (todo) поступают чаще, чем раз в период (1000), то эти запросы на выполнение игнорируюся.

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

PS - подобная обертка для функции является паттерном "Декоратор". См. паттерны в программировании

Пример throttling в библиотеке lodash

                HTML
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"><script>
                JS
function updateData () { ...}                
window.addEventListener('scroll', _.throttle(updateData, 100))  
            

Demo

Default: window.pageYOffset =
Throttle: window.pageYOffset =
throttling