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:
- Skiriamas darbuotojas: susijęs su jį sukūrusiu skriptu.
- Bendrai naudojamas darbuotojas: gali būti bendrinamas tarp kelių skriptų, veikiančių skirtinguose languose arba skirtukuose toje pačioje domeno srityje.
- 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 (
postMessageironmessage/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).