Sobes.tech
Middle

Kas ir tīmekļa darbinieki un kam tie ir nepieciešami?

sobes.tech AI

Atbilde no AI

Tīmekļa darbinieki — tas ir veids, kā palaist JavaScript kodu fonā, atdalītu no galvenā pārlūkprogrammas UI plūsmas.

Mērķis:

  • Resursu intensīvu aprēķinu veikšana bez galvenās plūsmas bloķēšanas, kas novērš saskarnes aizsaldēšanu.
  • Lielu datu apstrāde vai ilgstošu operāciju (piemēram, parsēšana, saspiešana, tīkla pieprasījumi dažos gadījumos) veikšana fonā.
  • Uzlabot tīmekļa lietojumprogrammu veiktspēju un atsaucību.

Tīmekļa darbinieku veidi:

  1. Veltīts darbinieks: saistīts ar skriptu, kas to izraisīja.
  2. Koplietojams darbinieks: var tikt koplietots starp vairākiem skriptiem, kas darbojas dažādos logu vai cilņu kontekstā vienā un tajā pašā domēnā.
  3. Pakalpojuma darbinieks: pārtrauc tīkla pieprasījumus, pārvalda kešatmiņu, nodrošina bezsaistes piekļuvi, atbalsta paziņojumus.

Piemērs — Veltīta darbinieka izveide un izmantošana:

// main.js (galvenā plūsma)
const worker = new Worker('worker.js');

// sūtīt ziņu darbiniekam
worker.postMessage('Sākt smagus aprēķinus');

// saņemt ziņu no darbinieka
worker.onmessage = function(event) {
  console.log('Saņemts no darbinieka:', event.data);
};

// worker.js (darbinieka kods)
self.onmessage = function(event) {
  console.log('Saņemts darbiniekā:', event.data);

  // smagu aprēķinu imitācija
  let result = 0;
  for (let i = 0; i < 1000000000; i++) {
    result += i;
  }

  // ziņas nosūtīšana atpakaļ galvenajā plūsmā
  self.postMessage('Aprēķini pabeigti, rezultāts: ' + result);
};

Ierobežojumi:

  • Nav tiešas piekļuves DOM.
  • Nav atļauts izmantot dažus galvenās plūsmas globālos mainīgos (pi, window, document).
  • Saziņa notiek caur asenhronisku ziņojumu apmaiņu (postMessage un onmessage/addEventListener('message')).
  • Dati starp plūsmām tiek pārsūtīti ar kopēšanu (strukturēta klonēšanas algoritms), bet lieliem datiem var izmantot Transferable Objects, kas pārsūta ar saiti (zaudējot piekļuvi sākotnējai plūsmai).