Ar kada nors susimąstėte, kaip atrodo, kad kai kurios svetainės veikia, net kai esate neprisijungę? Paslaptis paprasta: šiose svetainėse dirba paslaugų darbuotojai.
Aptarnavimo darbuotojai yra pagrindinė technologija, užtikrinanti daugelį į programėlę panašių šiuolaikinių žiniatinklio programų funkcijų.
Kas yra paslaugų darbuotojai?
Aptarnavimo darbuotojai yra specializuota rūšis JavaScript žiniatinklio darbuotojai. Paslaugų darbuotojas yra „JavaScript“ failas, kuris veikia šiek tiek kaip tarpinis serveris. Jis sugauna iš jūsų programos siunčiamas tinklo užklausas, leidžiančias kurti pasirinktinius atsakymus. Pavyzdžiui, galite pateikti talpykloje saugomus failus vartotojui, kai jis neprisijungęs.
Paslaugų darbuotojai taip pat leidžia prie žiniatinklio programų pridėti tokių funkcijų kaip sinchronizavimas fone.
Kodėl paslaugų darbuotojai?
Interneto kūrėjai ilgą laiką bandė išplėsti savo programėlių galimybes. Prieš atvykstant aptarnavimo darbuotojams, galėjote naudoti įvairius sprendimus, kad tai būtų įmanoma. Ypač pastebimas buvo „AppCache“, dėl kurio išteklių kaupimas talpykloje buvo patogus. Deja, buvo problemų, dėl kurių jis buvo nepraktiškas sprendimas daugeliui programų.
Atrodė, kad „AppCache“ yra gera idėja, nes ji leido labai lengvai nurodyti išteklius, kuriuos norite išsaugoti talpykloje. Tačiau ji padarė daug prielaidų apie tai, ką bandėte padaryti, o tada siaubingai sugedo, kai jūsų programa tiksliai neatitiko tų prielaidų. Perskaitykite Jake'o Archibaldo (deja, pavadintą, bet gerai parašytą) Programos talpykla yra Douchebag daugiau detalių. (Šaltinis: MDN)
Paslaugų darbuotojai šiuo metu bando sumažinti žiniatinklio programų apribojimus be tokių technologijų kaip „AppCache“ trūkumų.
Naudojimo atvejai paslaugų darbuotojams
Taigi, ką konkrečiai leidžia jums padaryti paslaugų darbuotojai? Aptarnavimo darbuotojai leidžia prie žiniatinklio programos pridėti funkcijų, būdingų vietinėms programoms. Jie taip pat gali teikti įprastą patirtį įrenginiuose, kurie nepalaiko paslaugų darbuotojų. Tokios programos kartais vadinamos Progresyvios žiniatinklio programos (PWA).
Štai keletas funkcijų, kurias teikia paslaugų darbuotojai:
- Leisti vartotojui toliau naudotis programa (ar bent jos dalimis), kai jis nebėra prisijungęs prie interneto. Aptarnavimo darbuotojai tai pasiekia aptarnaudami talpykloje saugomą turtą atsakydami į užklausas.
- „Chromium“ pagrindu veikiančiose naršyklėse paslaugų darbuotojas yra vienas iš reikalavimų, kad žiniatinklio programą būtų galima įdiegti.
- Aptarnavimo darbuotojai yra būtini, kad jūsų žiniatinklio programa galėtų įdiegti tiesioginius pranešimus.
Paslaugų darbuotojo gyvenimo ciklas
Paslaugų darbuotojai gali valdyti visos svetainės arba tik dalies svetainės puslapių užklausas. Tam tikrame tinklalapyje gali būti tik vienas aktyvus aptarnavimo darbuotojas, o visi paslaugų darbuotojai turi įvykiais pagrįstą gyvavimo ciklą. Aptarnaujančio darbuotojo gyvenimo ciklas paprastai atrodo taip:
- Darbuotojo registracija ir atsisiuntimas. Aptarnavimo darbuotojo gyvenimas prasideda, kai „JavaScript“ failas jį užregistruoja. Jei registracija sėkminga, paslaugų darbuotojas atsisiunčia ir pradeda veikti specialioje gijoje.
- Kai įkeliamas aptarnavimo darbuotojo valdomas puslapis, aptarnavimo darbuotojas gauna „diegimo“ įvykį. Tai visada pirmas įvykis, kurį gauna aptarnavimo darbuotojas, ir jūs galite nustatyti šio įvykio klausytoją darbuotojo viduje. Įvykis „įdiegti“ paprastai naudojamas norint gauti ir (arba) talpykloje išsaugoti visus išteklius, kurių reikia paslaugų darbuotojui.
- Kai paslaugų darbuotojas baigia diegti, jis gauna „aktyvinimo“ įvykį. Šis įvykis leidžia darbuotojui išvalyti perteklinius išteklius, kuriuos naudojo ankstesni tarnybos darbuotojai. Jei atnaujinate aptarnavimo darbuotoją, aktyvinimo įvykis suaktyvės tik tada, kai tai bus saugu. Taip yra tada, kai nėra įkeltų puslapių, kuriuose vis dar naudojama senoji paslaugų darbuotojo versija.
- Po to aptarnaujantis darbuotojas gali visiškai valdyti visus puslapius, kurie buvo įkelti sėkmingai užregistravus.
- Paskutinis gyvavimo ciklo etapas yra perteklius, kuris atsiranda, kai aptarnavimo darbuotojas pašalinamas arba pakeičiamas naujesne versija.
Kaip naudoti „JavaScript“ paslaugų darbuotojus
Service Worker API (MDN) suteikia sąsają, leidžiančią kurti ir bendrauti su „JavaScript“ paslaugų darbuotojais.
Paslaugų darbuotojai pirmiausia sprendžia tinklo užklausas ir kitus asinchroninius įvykius. Dėl to paslaugų darbuotojo API intensyviai naudojasi Pažadai ir asinchroninis programavimas.
Norėdami sukurti paslaugų darbuotoją, pirmiausia turite paskambinti navigator.serviceWorker.register() metodas. Štai kaip tai gali atrodyti:
jei ('serviso darbuotojas' navigatoriuje) {
navigator.serviceWorker.register('/sw.js').then(funkcija(Registracija){
console.log('Paslaugų darbuotojo registracija pavyko:', Registracija);
}).catch((klaida) => { console.log('Paslaugų darbuotojo registracija nepavyko:', klaida); });
} Kitas {
console.log('Paslaugų darbuotojai nepalaikomi.');
}
Tolimiausias if blokas atlieka funkcijų aptikimą. Tai užtikrina, kad su aptarnavimo darbuotojais susijęs kodas veiks tik tose naršyklėse, kurios palaiko paslaugų darbuotojus.
Tada kodas iškviečia Registruotis metodas. Jis perduoda kelią paslaugų darbuotojui (palyginti su svetainės kilme), kad jis užsiregistruotų ir atsisiųstų. The Registruotis metodas taip pat priima pasirenkamą parametrą, vadinamą apimtimi, kurį galima naudoti apriboti darbuotojo valdomus puslapius. Pagal numatytuosius nustatymus paslaugų darbuotojai valdo visus programos puslapius. The Registruotis metodas grąžina pažadą, nurodantį, ar registracija buvo sėkminga.
Jei pažadas išsprendžiamas, paslaugų darbuotojas sėkmingai užsiregistravo. Tada kodas konsolėje atspausdina objektą, reprezentuojantį registruotą aptarnavimo darbuotoją.
Jei registracijos procesas nepavyksta, kodas užfiksuoja klaidą ir įrašo ją į konsolę.
Toliau pateikiamas supaprastintas pavyzdys, kaip gali atrodyti pats paslaugų darbuotojas:
self.addEventListener('diegti', (įvykis) => {
event.waitUntil(naujasPažadas((išspręsti, atmesti) => {
console.log("atlieka sąrankos dalykus")
išspręsti ()
}))
console.log("Serviso darbuotojas baigė diegti")
})self.addEventListener('aktyvuoti', (įvykis) => {
event.waitUntil(naujasPažadas((išspręsti, atmesti) => {
console.log("atlieka valymo darbus!")
išspręsti ()
}))
console.log('aktyvinimas atliktas!')
})
self.addEventListener('atnešti', (įvykis) => {
console.log("Užklausa perimta", renginys)
});
Šis demonstracinės paslaugos darbuotojas turi tris įvykių klausytojus, užsiregistravusius prieš save. Jis turi vieną įvykiui „įdiegti“, „aktyvinti“ ir „gauti“.
Pirmųjų dviejų klausytojų viduje kodas naudoja palauk iki metodas. Šis metodas priima pažadą. Jos užduotis yra užtikrinti, kad aptarnaujantis darbuotojas lauks, kol pažadas bus išspręstas arba atmestas, prieš pereidamas prie kito įvykio.
Gavimo klausytojas suaktyvinamas kiekvieną kartą, kai pateikiama užklausa dėl išteklių, kuriuos valdo aptarnavimo darbuotojas.
Aptarnavimo darbuotojo valdomi ištekliai apima visus jo valdomus puslapius, taip pat visus tuose puslapiuose nurodytus išteklius.
Patobulinkite savo žiniatinklio programas su paslaugų darbuotojais
Aptarnavimo darbuotojai yra ypatingos rūšies žiniatinklio darbuotojai, kurie atlieka unikalų tikslą. Jie sėdi prieš tinklo užklausas, kad įgalintų tokias funkcijas kaip programa neprisijungus. Paslaugų darbuotojų naudojimas žiniatinklio programoje gali labai pagerinti vartotojo patirtį. Galite sukurti paslaugų darbuotojus ir su jais bendrauti naudodami paslaugų darbuotojo API.