Sissejuhatus veebitöötajate JavaScript API-sse
Veebitöötajad on JavaScript API, mis võimaldab teil käivitage skriptid peamisest eraldi lõngast. See võib osutuda kasulikuks, kui te ei soovi põhiskriptide teostamisel mingeid takistusi taustaprogrammide tõttu.
Veebitöötajate API on toetatud peaaegu kõigis brauserites, Täpsema teabe saamiseks vaadake CanIUse'i dokumente. Enne koodi sattumist näeme paar stsenaariumi, kus võiksite seda API-d kasutada, et saaksite ettekujutuse sellest, mida ma mõtlen taustapõhised skriptid
.
Kasutage juhtumeid
Oletame, et seal on skript tõmbab ja töötleb faili. Kui fail on oluliselt suur see võtab kaua aega tööd! Mis võib takistada teisi skripte, mida hiljem hukati.
Kui aga failitöötlus viiakse taustalõngale, tuntud kui töötaja niit, teisi sündmusi ei blokeerita enne, kui esimene on lõppenud.
Skript teostatakse töötaja taustal on tuntud kui töötaja skript või lihtsalt töötaja.
Teise näitena kujutage ette, et on suur vorm, mis on paigutatud sakkidesse. See on skriptitud viisil, mis uuendab juhtnuppe ühes vahekaardis mõjutab mõningaid kontrollkäike teistes.
Kui teiste kaartide värskendus võtab kasutaja aega ei saa aktiivset vahekaarti pidevalt kasutada ilma selle sündmuste pidamiseta. See võib kasutajaliidese külge külmutada kasutaja ärevust.
Kuna kasutaja ei näe teisi vahelehti praeguse täitmisel, saate seda teha värskendage taustalõnga teiste vahekaartide juhtelemente. Sel moel saab kasutaja jätkata praeguse vahekaardi kasutamist, mida ta täidab, ilma et mõni selle skripte blokeeriks teiste vahekaartide juhtimisseadmete värskendusprotsess.
Samuti, kui leiate stsenaariumi, kus skript on olemas võib kasutaja kasutajaliidese kasutamise blokeerida kuni selle teostamiseni võite kaaluda selle teisaldamist töötaja niidile, nii et seda saaks teostada taustal.
Töötajate ulatus ja liigid
Veebitöötajate API on tõenäoliselt üks lihtsamaid API-sid. Sellel on üsna lihtsad meetodid luua töötajate niidid ja suhelda nendega põhiskriptist.
Töötajate niidi ülemaailmne ulatus on peakeermest erinevas kontekstis. Sina ei pääse juurde meetoditele ja omadustele aken
objekti nagu näiteks hoiatus ()
töötaja niidi sees. Sina samuti ei saa DOM-i vahetada töötaja lõngast.
Kuid sina saab kasutage palju API-sid, mis kuuluvad aken
, näiteks Lubadus
ja Tõmba
, teie töötajate lõimes (vt täielikku nimekirja).
Sul võib olla ka sisestatud töötaja niidid: teisest töötaja niidist loodud lõime. Teise töötaja loodud töötaja on a alltöövõtja.
On ka palju tüübid töötajaid. Kaks peamist neist on pühendunud ja jagatud töötajad.
Pühendunud töötajad kuuluvad samasse sirvimise konteksti et nende peamine niit kuulub. Jagatud töötajad on aga esinevad erinevas sirvimise kontekstis (näiteks iframes) põhiskriptist. Mõlemal juhul peamine skript ja töötajad peavad olema samas domeenis.
Selles juhendis on näiteks pühendunud töötaja kohta, mis on kõige levinum tüüp.
API meetodid
Vaadake allolevat diagrammi a kohta kiire ülevaade kõigist peamistest meetoditest mis moodustavad veebitöötajate API.
The Töötaja ()
konstruktor loob spetsiaalse töötaja niidi ja tagastab oma võrdlusobjekti. Seejärel kasutame seda objekti konkreetse töötajaga suhtlemiseks.
The postMessage ()
meetodit kasutatakse nii põhi- kui ka töötajate skriptides saata üksteisele andmeid. Seejärel saadetakse saadetud andmed teiselt poolt onmessage
sündmuste käitleja.
The lõpetage ()
meetod lõpetab põhiskripti töötaja niidi. See lõpetamine on kohe: mis tahes praegune skriptide täitmine ja pooleliolevad skriptid tühistatakse. The Sulge()
meetod teeb sama, aga see on kutsus ennast sulgev töötaja niit.
Näide kood
Vaatame nüüd proovi koodi. The index.html
lehel on põhiskript sees tag, while the worker script is held in a JavaScript file called
worker.js
.
Alustame töötaja lõime loomine põhiskriptist.
w = uus töötaja ('worker.js');
The Töötaja ()
konstruktor võtab argumendina töötaja faili URL-i.
Seejärel lisame selle jaoks sündmuste käitleja onmessage
äsja loodud töötaja puhul saada andmeid. The andmeid
vara e
sündmus hoiab vastuvõetud andmeid.
w = uus töötaja ('worker.js'); w.onmessage = (e) => console.log („Vastuvõetud töötajalt: $ e.data”);
Nüüd me kasutame postMessage ()
kuni saata mõned andmed töötaja niidile ühe nupuvajutusega. The postMessage ()
meetod võib võtta kaks argumenti. Esimene võib olla mis tahes tüüpi (string, array…). See on andmed saadetakse töötaja niidile (või põhiskriptile, kui meetod on töötaja lõimes).
Teine, valikuline parameeter on objektide komplekt saab kasutada töötaja niidid (kuid mitte põhiskriptiga või vastupidi). Selliseid objekte nimetatakse Ülekantav
objektid.
document.querySelector ('nupp') onclick = () => w.postMessage ('john');
Ma lihtsalt saadan stringi väärtuse töötaja niidile.
Töötaja niidis peame lisama onmessage
sündmuste käitleja seda saavad andmed saatis selle nupu klõpsuga põhiskripti. Meeskonna sees, me ühendage vastuvõetud string teise ja saadab tulemuse põhiskriptile.
console.info („loodud töötaja”); onmessage = (e) => postMessage ('Hi $ e.data');
Erinevalt põhiskriptist, kus me pidime seda kasutama w
viideobjektile viidake konkreetse töötaja niidile mille puhul skript seejärel kasutab onmessage
ja postMessage
meetodid töötaja lõimes ei ole vaja võrdlusobjekti suunata peakeermele.
Kood toimib järgmiselt. Kui brauser laadib index.html
, konsool näitab "töötaja loodud"
teade niipea, kui töötaja ()
konstruktor täidetakse peakeermes, uue töötaja loomine.
Kui klõpsate lehel nupul, saate selle "Saadud töötajalt: Hi john"
sõnum konsoolis, mis oli string tööriidi lõngaga talle saadetud andmetega ja seejärel oli saadetud põhiskriptile.