Middle
Чӣ гуна метавон ҷараёни Web Worker-ро дар JavaScript эҷод кард?
sobes.tech AI
Ҷавоб аз AI
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теги код өзүнчө потокто иштейт, бул негизги потокту блоктодон сактайт жана иштөө ылдамдыгын жакшыртат, өзгөчө ресурсту талап кылган эсептөөлөрдө.