Sobes.tech
Middle

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

sobes.tech AI

AIден жооп

JavaScript-те Web Worker түзүү үчүн Worker конструктору колдонулат, ал скрипттин жолун кабыл алат, ал бөлүнгөн агымда иштейт:

const worker = new Worker('path/to/worker.js');

Worker скрипти (worker.js) башка глобалдык контекстте иштейт, ал DOM же глобалдык объект windowке жетпейт. Маалымат алмашуу үчүн негизги скрипт жана воркер ортосунда postMessage() ыкмасы жана onmessage окуя иштетүүчү колдонулат:

Негизги скриптте:

const worker = new Worker('worker.js');

// Маалыматты воркерге жөнөтүү
worker.postMessage({ data: 'Салам негизги агымдан!' });

// Воркерден келген билдирүүлөрдү иштетүү
worker.onmessage = function(event) {
  console.log('Алынады воркерден:', event.data);
};

// Воркердин каталарын иштетүү (міндеттүү эмес)
worker.onerror = function(error) {
  console.error('Воркердеги каталар:', error);
};

// Воркер ишин токтотуу
// worker.terminate();

Worker скрипти (worker.js):

// Негизги агымдан келген билдирүүлөрдү иштетүү
self.onmessage = function(event) {
  console.log('Воркерде алынган:', event.data);

  // Узак мөөнөттүү операцияны аткаруу (мисал)
  let result = 0;
  for (let i = 0; i < 1000000000; i++) {
    result += i;
  }

  // Натыйжаны кайра негизги агымга жөнөтүү
  self.postMessage({ result: result, originalData: event.data });
};

// Воркер ичиндеги каталарды иштетүү (міндеттүү эмес)
self.onerror = function(error) {
  console.error('Воркер ичиндеги каталар:', error);
};

// Воркер башка скрипттерди импорттой алат
// importScripts('utils.js', 'helper.js');

Web Workers ресурстук оор эсептөөлөрдү бөлүнгөн агымга өткөрүүгө мүмкүндүк берет, бул негизги UI агымын бөгөттөөдөн сактайт жана колдонмонун жоопкерчилигин жакшыртат. Чектөөлөрдү эске алуу керек: воркерлер DOM, window, document, localStorage жана sessionStorage түздөн-түз жеткиликтүү эмес. Маалымат алмашуу маанилердин көчүрмөсү аркылуу же Transferable объекттери колдонулуп, чоң көлөмдөгү маалыматтарды өткөрүүдө натыйжалуулук жогорулайт.