Вас может заинтересовать debounce:
Использование Loda sh:
_.debounce(func, [wait=0], [options={}])
Ваниль JS Реализация:
let debounce = > (func, wait, immediate) {
var timeout;
return function executedFunction() {
var context = this;
var args = arguments;
var later = function() {
timeout = null;
if (!immediate) func.apply(context, args);
};
var callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) func.apply(context, args);
};
};
// to call this
debounce(function() {
// All the taxing stuff you do
}, 250);