Middle
Kuidas luua Web Worker voog JavaScriptis?
sobes.tech AI
Vastus AI-lt
JavaScript-те Web Worker поток түзүү үчүн Worker конструкторун колдонсо болот.
// Жаңы Web Worker түзөбүз, JS-файлдын жолун берип,
// ал өзүнчө потокто ишке ашырылат.
const worker = new Worker('worker.js');
worker.js файлынын ичинде (же башка файл, воркер түзүлгөндө көрсөтүлгөн) код өзүнчө потокто ишке ашырылат.
// worker.js
// Негизги потоктон келген билдирүүлөрдү иштетүү
self.onmessage = function(event) {
const receivedData = event.data;
console.log('Негизги потоктон билдирүү алынды:', receivedData);
// Билдирүүнү кайра негизги потокко жөнөтүү
const responseData = { message: 'Workerден салам!', data: receivedData };
self.postMessage(responseData);
};
// Кошумча, мүмкүн болсо, каталардын иштетилишин кошуу
self.onerror = function(error) {
console.error('Workerдеги ката:', error);
};
Негизги потокто (воркер түзүлгөн жерден) менен иштешүүгө болот:
// main.js
const worker = new Worker('worker.js');
// Web Workerге билдирүү жөнөтүү
worker.postMessage({ command: 'start', payload: 'кейбир маалымат' });
// Web Workerден келген билдирүүлөрдү иштетүү
worker.onmessage = function(event) {
const receivedData = event.data;
console.log('Workerден билдирүү алынды:', receivedData);
};
// Web Workerдеги каталар
worker.onerror = function(error) {
console.error('Негизги потоктогу Worker катасы:', error);
};
// Web Workerди токтотуу (каалоо боюнча)
// worker.terminate();
Ключевые моменты:
- Коммуникация: Обмен данными между основным потоком и worker происходит через методы
postMessage()и обработчикonmessage. - Ограничения: Worker не имеют доступа к DOM, объекту
window, и другим глобальным объектам браузера. Они имеют ограниченный доступ к объектамnavigator,location,XMLHttpRequest,setTimeout,setInterval,fetch,WebSocketsи другим. - Изоляция: Код в worker выполняется в отдельном потоке, что предотвращает блокировку основного потока и улучшает производительность, особенно при выполнении ресурсоемких вычислений.