Sobes.tech
Middle

JavaScriptте Web Worker агымын кантип түзүү керек?

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теги код өзүнчө потокто иштейт, бул негизги потокту блоктодон сактайт жана иштөө ылдамдыгын жакшыртат, өзгөчө ресурсту талап кылган эсептөөлөрдө.