Per lungo tempo, funzionalità offline, la sincronizzazione dello sfondo e le notifiche push hanno differenziate app native dalle loro controparti web. Il API del servizio di servizio è una tecnologia che cambia di gioco che risulta il campo di gioco. In questo tutorial, lo useremo per costruire una pagina che può servire contenuti anche mentre non esiste una connessione Internet.
Il modo più semplice per pensare ai lavoratori del servizio è come un pezzo di codice installato da un sito su un computer client, viene eseguito in background e successivamente consente alle richieste inviate a quel sito da intercettare e manipolate. Poiché questa è una capacità così potente, lavorare con i lavoratori del servizio in un ambiente dal vivo che devi correre su https. Ciò garantisce che non possano essere sfruttati, assicurandosi che il lavoratore di servizio che il browser riceve da una pagina sia genuina.
Per scopi di sviluppo, tuttavia, possiamo eseguire senza https da allora http: // localhost / è consentito come un'eccezione a questa regola. Il modo più semplice per iniziare è con la NPM http-server. pacchetto.
NPM Installa http-server -g
http-server -p 8000 -c-1
Non c'è nulla sul server in questo momento, quindi facciamo una pagina di base da servire. Creeremo un nuovo file index.html e quando eseguemo il server, ora sarà accessibile http: // localhost: 8000 .
In questa fase, troverai che se termina il server HTTP e aggiorni la pagina nel browser, riceverai una pagina di errore poiché il sito non può essere raggiunto. Questo è interamente previsto poiché non abbiamo ancora memorizzato la cache del contenuto offline.
& lt ;! DOCTYPE HTML & GT;
& lt; html & gt;
& lt; head & gt;
& lt; meta charset = "utf-8" / & gt;
& lt; Titolo & GT; Service Worker & Lt; / Titolo & GT;
& lt; script src = "site.js" & gt; & lt; / script & gt;
& lt; lt; link rel = "stilsheet" type = "text / css" href = "custom.csss" & gt;
& lt; / head & gt;
& lt; corpo e GT;
& lt; header & gt;
& lt; h1 & gt; benvenuto e lt; / h1 & gt;
& lt; / header & gt;
& lt; div id = "contenuto" e GT;
& lt; P & GT; contenuto qui & lt; / P & GT;
& lt; img src = "kitty.jpg" width = "100%" & gt;
& lt; / div & gt;
& lt; / corpo e GT;
& lt; / html & gt;
Ora abbiamo una pagina abbastanza insignificante in esecuzione, ed è ora di iniziare a pensare di implementare un lavoratore di servizio. Prima di ottenere la codifica, vale la pena prendere un momento per capire il ciclo di vita dei lavoratori del servizio.
Il processo inizia con la "registrazione" di un lavoratore di servizio nel tuo JavaScript, che dice al browser di iniziare a installare il lavoratore - il primo passo del suo ciclo di vita. Durante tutto il suo ciclo di vita, un lavoratore di servizio sarà in uno dei seguenti stati:
Registrare un lavoratore di servizio. Questo punta in modo efficace il browser al file JavaScript che definisce il comportamento del lavoratore del servizio. La registrazione viene eseguita utilizzando l'oggetto ServiceWorker che è il punto di ingresso dell'API. Controlleremo anche che l'API sia effettivamente presente nel browser prima di provare a farlo.
Il Registrati() La funzione può essere chiamata in sicurezza ogni volta che il caricamento della pagina e il browser determinerà se il servizio di servizio è già stato registrato.
IF ('ServiceWorker' in Navigator) {
finestra.AddeventListener ('Load', Function () {
navigator.serviceworker.register ('serviceworker.js', {scope: '. /'}).then(function(registration) {
console.log ("Il lavoratore di servizio registrato con successo.");
}, funzione (errore) {
console.log ("Errore registrazione del servizio del servizio:" + Errore);
}););
}););
}
Quindi dobbiamo implementare il lavoratore di servizio stesso. I lavoratori del servizio possono ascoltare una gamma di eventi relativi al proprio ciclo di vita e attività sulla pagina. I più importanti sono installati, attivano e recuperano.
Iniziamo creando un ascoltatore per il installare Evento, che innesca una volta completato l'installazione del lavoratore. Ciò ci consente di istruire il lavoratore di servizio di aggiungere alcuni contenuti offline nella cartella corrente a una cache. Dobbiamo anche nominare la nostra cache - dal momento che vecchi cache possono persistere, aggiornare / versioni di controllo Questo nome della cache consente di servire le versioni più recenti del contenuto in seguito.
Var CurrentCache = 'demo-cache';
self.addeventlistener ('install', event = & gt; {
event.waittunill (
caches.open (CurrentCache) .then (funzione (cache) {
console.log ("Aggiunta di contenuti alla cache".);
ritorno cache.addall ([[
'./index_offline.html',
'./kitty_offline.jpg',
'./CSS personalizzato'
]);
})
);
});
La nostra pagina ora cacherà il contenuto se caricato, ma abbiamo bisogno di un meccanismo per intercettare le richieste e reindirizzarle a questa cache. Per fare questo, dobbiamo ascoltare recupero eventi, che vengono attivati quando una richiesta come ottenere il nostro index.html. il file è fatto attraverso la rete. Abbiniamo quindi la richiesta contro la cache e serviamo la risorsa nella cache se trovata. Altrimenti, torniamo a una richiesta di recupero API al server.
Vale la pena a questo punto che nota che abbiamo una pesante dipendenza dalle promesse JavaScript di lavorare. Questi possono essere un po 'complicati, quindi vale la pena familiarizzare se non li hai usati prima.
Self.addeventListener ('Fetch', Event = & GT; {
event.Respondwith (
caches.match (event.request) .then (risposta = & gt; {
Risposta di ritorno ||. recupero (event.request);
})
);
});
Se lo testi ora (termini il server HTTP e aggiorna la pagina), è necessario scoprire che la tua pagina funziona online e offline. È probabile che, tuttavia, che vorrai un comportamento offline più intelligente, con diversi contenuti o funzionalità disponibili quando il server non è disponibile.
Per raggiungere questo obiettivo, possiamo estendere il nostro recupero Risposta degli eventi Ulteriore per verificare specificamente per le richieste di navigazione e rispondere con una pagina offline diversa quando si è rilevata. Questo index_offline.html. Il file può essere una variazione della tua pagina online o qualcosa di completamente diverso e può anche utilizzare altre risorse che hai memorizzato nella cache CSS personalizzato .
Self.addeventListener ('Fetch', Event = & GT; {
se (event.request.mode === 'navigate') {
event.Respondwith (
recupera (event.request) .Catch (Errore = & GT; {
console.log ("pagina non disponibile. Restituire il contenuto offline.");
ritorno caches.match ('./ index_offline.html');
})
);
} altro {
event.Respondwith (
caches.match (event.request) .then (risposta = & gt; {
Risposta di ritorno ||. recupero (event.request);
})
);
}
});
C'è un'altra cosa di cui abbiamo bisogno. Se ora provi a modificare il tuo contenuto offline, lo troverai non aggiorna quando testi la tua pagina - hai ancora la vecchia versione! Questo perché i file più vecchi sono ancora memorizzati nella cache.
È necessario implementare qualcosa per pulire i file obsoleti dalla cache per evitare che vengano serviti. Questo è fatto rispondendo a un attivare Evento ed eliminazione di tutti i cache che non corrispondono al nome specificato in CurrentCache. È quindi possibile aggiungere un numero di versione a CurrentCache ogni volta che modifichi il contenuto offline, per assicurarsi che sia aggiornato.
Questo.AddeventListener ('Attiva', Event = & GT; {
VAR Activecaches = [currenceCache];
console.log ("operatore di servizio attivato. Il controllo della cache è aggiornato.");
event.waittunill (
caches.Keys (). Quindi (keylist = & gt; {
return Promise.ALL (Keylist.map (KeyList = & GT; {
IF (ActiveCaches.indexof (Key) === -1) {
console.log ("Eliminazione della vecchia cache" + tasto);
ritorno caches.Delete (chiave);
}
}));
})
);
});
Questo articolo è stato pubblicato nel numero della rivista Web Designer # 268. Iscriviti ora.
Per saperne di più:
(Immagine di immagine: futuro) I caratteri variabili consentono ai progettisti di caratteri di definire le variazioni..
Le conversioni giorno per notte sono state in giro per tutto il tempo che Photoshop ha avuto strati di aggiustamento, ma padroneg..
Abbiamo tutti un grande negozio di ricordi presi come foto ed è bello essere in grado di ricordare. Ma cosa succede se potessi f..
Questo Tutorial maya. Ti mostrerà come costruire impianti di impianti personalizzati. Le migliori impianti sono q..
È fastidioso per gli utenti del sito web fare clic su un collegamento solo per scoprire che la pagina Web non è di interesse, s..
La pittura digitale ha sofferto storicamente di sembrare troppo artificiale, ma con la vasta gamma di software disponibili oggi, ..
FlexBox, o il layout della casella flessibile, è un potente modulo di layout CSS che offre ai web designer e agli sviluppatori u..
L'anno scorso è stato un campo da gioco per l'industria dei videogiochi e per gli artisti statunitensi abbastanza fortunati da g..