Задать вопрос
@hippocrates_ho_koios
врач-кибернетик

Как избежать зависание textarea при обработке большого массива?

Добрый день. На поле textarea висит обработчик события 'input', который запускает обработку большого массива в цикле, из-за чего после ввода текста textarea "зависает" и дальнейший ввод становится на пару секунд невозможным. Как обернуть этот процесс в асинхронную функцию?

UPD: таки реализовал с помощью веб-воркеров. Или есть лучший вариант?
  • Вопрос задан
  • 292 просмотра
Подписаться 3 Простой Комментировать
Ответ пользователя iljaGolubev К ответам на вопрос (3)
@iljaGolubev
Debounce

Обработка массива с использованием данных из текстового поля не имеет смысла пока значение поля изменяется.
Нужно запускать обработчик после завершения ввода. На практике, с небольшой задержкой которую вы можете подобрать индивидуально. Гуглится елементарно.

пример для илюстрации
const debounce = (callback, wait) => {
  let timeoutId = null;
  return (...args) => {
    window.clearTimeout(timeoutId); // повторый вызов отменит предыдущий
    timeoutId = window.setTimeout(() => {
      callback(...args);
    }, wait); // и запустит новый
  };
}

const runDebouncedBigArrayOnInputEnds = debounce(
    (event) => {
      // запускает обработку большого массива в цикле
    }, 
   250 // сколько ждать завершения ввода
);

document.getElementById('#myTxtField').addEventListener('input', runDebouncedBigArrayOnInputEnds );
Ответ написан