https://javascript.plainenglish.io/when-and-why-to-use-debounce-vs-throttle-in-javascript-d51a452b7b6e