Не хочется использовать целый сервер просто в качестве файлового хранилища.
<input type="text" id="textarea">
// Код воркера в виде строки
const workerCode = `
self.onmessage = (event) => {
const largeArray = event.data;
// Выполнение тяжелой обработки массива
for (let i = 0; i < largeArray.length; i++) {
// Например: largeArray[i] = someProcessing(largeArray[i]);
largeArray[i] *= 2; // Пример обработки: удваиваем каждый элемент
}
// Отправка обработанных данных обратно в главный поток
self.postMessage(largeArray);
};
`;
// Создание Blob из строки с кодом воркера
const blob = new Blob([workerCode], { type: 'application/javascript' });
// Создание объекта Worker из URL на Blob
const worker = new Worker(URL.createObjectURL(blob));
// Обработка сообщений от воркера
worker.onmessage = (event) => {
const processedArray = event.data;
console.log('Обработанный массив:', processedArray);
// Можно обновить интерфейс или использовать данные
};
// Пример массива для обработки
const largeArray = new Array(1e6).fill(15);
function debounce(func, delay) {
let timeout;
return function(...args) {
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(this, args), delay);
};
}
const handleInput = debounce(() => {
worker.postMessage(largeArray);
}, 300); // Вызываем через 300 мс после окончания ввода
// Пример добавления обработчика для textarea
textarea.addEventListener('input', (event) => {
console.log(event.target.value);
handleInput();
});
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 );