Sobes.tech
Middle

Kas yra interneto darbuotojai ir kam jie reikalingi?

sobes.tech AI

Atsakymas iš AI

Žiniatinklio darbuotojai — tai būdas paleisti JavaScript kodą foniniame sraute, atskirai nuo pagrindinio naršyklės UI srauto.

Paskirtis:

  • Išteklių reikalaujančių skaičiavimų vykdymas nesustabdant pagrindinio srauto, kas užkerta kelią sąsajos užšalimui.
  • Didelių duomenų apdorojimas arba ilgalaikių operacijų (pavyzdžiui, analizės, suspaudimo, tinklo užklausų kai kuriais atvejais) vykdymas foniniame režime.
  • Interneto programėlių našumo ir reagavimo gerinimas.

Žiniatinklio darbuotojų tipai:

  1. Skiriamas darbuotojas: susijęs su jį sukūrusiu skriptu.
  2. Bendrai naudojamas darbuotojas: gali būti bendrinamas tarp kelių skriptų, veikiančių skirtinguose languose arba skirtukuose toje pačioje domeno srityje.
  3. Paslaugos darbuotojas: perima tinklo užklausas, valdo talpyklą, užtikrina neprisijungusį prieigą, palaiko pranešimus siuntimą.

Pavyzdys, kaip sukurti ir naudoti skiriamą darbuotoją:

// main.js (pagrindinis srautas)
const worker = new Worker('worker.js');

// siųsti žinutę darbuotojui
worker.postMessage('Pradėti sunkius skaičiavimus');

// gauti žinutę iš darbuotojo
worker.onmessage = function(event) {
  console.log('Gauta iš darbuotojo:', event.data);
};

// worker.js (darbuotojo kodas)
self.onmessage = function(event) {
  console.log('Gauta darbuotojuje:', event.data);

  // sunkių skaičiavimų imitacija
  let result = 0;
  for (let i = 0; i < 1000000000; i++) {
    result += i;
  }

  // siųsti žinutę atgal į pagrindinį srautą
  self.postMessage('Skaičiavimai baigti, rezultatas: ' + result);
};

Apribojimai:

  • Nėra tiesioginės prieigos prie DOM.
  • Negalima naudoti kai kurių pagrindinio srauto globalių kintamųjų (pvz., window, document).
  • Ryšys vyksta per asinchroninį žinučių mainus (postMessage ir onmessage/addEventListener('message')).
  • Duomenys perduodami kopijavimo būdu (struktūruotas klonavimo algoritmas), tačiau dideli duomenys gali būti perduodami naudojant Transferable Objects, kurie perduoda nuorodą (prarandama prieiga prie pradinio srauto).