) {//wait all cache deleted returnPromise.all (//filter out staticcachename (only keep Staticcachename)Cachenames.filter (function (name) {returnName.startswith ('wittr') Name! =Staticcachename; }). map (function (name) {//Delete cache, return promise returncaches.delete (name); }) ) }) )})So in the code, the static one is ' wittr-demo-v13 '.We Use the APIs:// return a promise with all the cache name // return a promise and delete the selecte
= Db.transaction (' People '); varPeoplestore = Tx.objectstore (' People ')); returnPeoplestore. GetAll
(); }). Then (function(People) {console.table (people);});
Group by:To does gourp by we need to create INDEX: Import IDB from ' IDB '; varDbpromise = Idb.open (' test-db ', 3,function(upgradedb) {Switch(upgradedb.oldversion) { Case0:
//Keyval Store is already created at version 1
varKeyvalstore = Upgradedb.createobjectstore (' Keyval ')); Keyvalstore.put ("Wo
Even if you had your application fully cached, you couldn ' t perform any external request without internet connection. That's why in order to build a offline-capable application, you must know when it ' s actually offline.This lesson shows the Navigatoronline API and Online/offline events on order to disable the functionality T o Send messages of the application. this. Online = navigator.online window.addeventlistener (' online ', () + = (This True) window.addeventlistener (' Offline
Previously we saw how to hijacking all the reqest, but this is not useful. So-now we want to see how to hijacking one kind of request. For example we want SERVCE worker only response to the request ends with ". jpg":Self.addeventlistener ('Fetch', Function (Event) { //Todo:only respond to requests with a//url ending in ". jpg" if(Event. Request.url.endsWith (". jpg")){ Event. Respondwith (Fetch ('/imgs/dr-evil.gif') ); }});Https://developer.mozilla.org/en-US/docs/Web/API/Request[
', ' dismiss '] }); Toast.answer.then (function(answer) { if (answer! = ' Refresh ') { // Tell the service worker to skipwaiting Worker.postmessage ({message: ' Skipwaiting '}} );};Service worker: Listen to the message event and call Skilwaiting ():// Todo:listen for the ' message ' event, and call // skipwaiting If you get the appropriate message function (event) { if(event.data.message = = "Skipwaiting") { self.skipwaiting (); }})The on We page, listen to Control
Once serive worker is registered, the first time we go to the app, we cannot see the logs from servcie works. Any only refersh it second time, then we able to see the logs.
Once we change service worker, it doesn't seem that we have change it.
The no1. is because, service worker only take control after it is loaded. but the first time we go to the page, service worker actually is not there, because, the browser need to fetch our assets, CSS, and JavaScript f
Pwa:add to Home screen
Angular Universal Server side rendering:for achieving better proference on init loading
Angular 2 CLI
ng New MyApp--mobile
Sw-precache:with Webpack:
Sw-toolbox:run Time Caching
ANGULAR2 Material Design:
*shellrender and *shellnorender
*shellrender:work as App Shell, happen before Angular 2 Component get rendered*shellnorender:angular2 Component take placeGO PROGRESSIVE[PWA
store one copy of each avatar. varStorageurl = Request.url.replace (/-\dx\.jpg$/, "); //Todo:return images from the "Wittr-content-imgs" cache //if they ' re in there. But afterwards, go to the network //To update the entry in the cache. // //Note that this is slightly different to servephoto! returnCaches.open (Contentimgscache). Then (function(cache) {returnCache.match (Storageurl). Then (function(response) {varNetfetchresponse = Fetch (Request). Then (function(networkresponse) {cache.p
Intead of Cache The root floder, we want to cache skeleton instead. self.addeventlistener (' Install ', function function return
Cache.addall ([
'/ ' js/main.js ' ' css/main.css ' , ' imgs/icon.png ' , ' https://fonts.gstatic.com/s /roboto/v15/2ux7wltfw3w8tcltuvlfyq.woff ' , ' https://fonts.gstatic.com/s /roboto/v15/d-6iyplofoccackzxwxsod8e0i7kzn-epnyo3hzu7kw.woff ' Respond to requests for the root page with thepage skeleton from the cache:Self.addeventlisten
' }); Store.createindex (' by-date ', ' time '); });In _opensocket, we had a function to fetch the old data from the IDB.// Open a connection to the server for live updates function () {... Ws.addeventlistener (function(event) { requestanimationframe() { Indexcontroller. _onsocketmessage (event.data); }); ...};//called when the Web socket sends message dataIndexcontroller.prototype._onsocketmessage =function(data) {varMessages =json.parse (data); This. _dbpromise.then (func
Most of the analysis results show that some tasks of the project have unreasonable logic in allocation and work hours, leading to exceptions in the webpart. Usually, the PWA System maintenance staff will be crazy at this time, because no one changes the settings, the server services are normal, and this logical error occurs inadvertently under the project manager. I felt that the last second was still good, and suddenly I got down. (For administrators
')); Peoplestore.put ({name:"John",//name is the keyAge:23, Favoriteanimal:' Cat ' }); Peoplestore.put ({name:"Joe",//name is the keyAge:21, Favoriteanimal:' Cat ' }); Peoplestore.put ({name:"Jie",//name is the keyAge:22, Favoriteanimal:' Dog ' }); Peoplestore.put ({name:"Jay",//name is the keyAge:24, Favoriteanimal:' Dog ' }); returnTx.complete;}). Then (function() {Console.log ("People is added");}); Dbpromise.then (function(db) {vartx = Db.transaction (' People ', ' ReadWrite ');
(' Updatefound ',function(){ //reg.installing is changed })})Api:linkFor the service worker itself:var sw =// ... logs "Installing"/ /// "Installed" // "activating"/ /" avvtivated"// "redundant" Sw.addeventlistener (function() { // Sw.state has changed })Aslo about:Naviagetor.serviceWorker.controller"Navigator.serviceWorker.controller" refer to the service worker, that controls the page.So if there was no controller, then it means the data was loading from network:if (! Naviga
the root scope, so it's available to all the Child components.2. Our service worker file:// Sw.js Self.addeventlistener ('fetch', function (event) { Console.log (event. request);});Once you fetch the page seond time (first time service work do cache stuff), second time you'll see in the console, the Re is lots of requests log out.
Of course, service worker has other event listeners:Self.addeventlistener ('Install', Function (Event) { // ..}); Self.addeventlistener ('Activate', Function
Link to CodelabIn this codelab, we'll retrace those steps but this time we'll use a tool called Sw-precache to add offline functionality With only six lines of code. It's never been easier to add service worker support to an existing app, and we'll show you what in this codelab.Learning:
What's the Sw-precache tool is and how it can help you being more productive
How to add a basic service worker to an existing project using Sw-precache
Install:git clone https://gith
) {returnResponse | |fetch (event.request); }) );});The Servephoto ():We want to make sure-things:
We don ' t care the photo size, 800px,200px or 40px
Because respond object can be is only access once, so we need Clone () the original one and use clone one for the CAHCE, retur n the original one to the browser.
functionServephoto (Request) {varStorageurl = Request.url.replace (/-\d+px\.jpg$/, "); returnCaches.open (Contentimgscache). Then (function(cache) {returnCache.match (S
the create the cache, but it was not a useful until we use the cache.To use the cache, we can do:Self.addeventlistener (' Install ',function(event) {varUrlstocache = [ ‘/‘, ' Js/main.js ', ' Css/main.css ', ' Imgs/icon.png ', ' Https://fonts.gstatic.com/s/roboto/v15/2UX7WLTfW3W8TclTUvlFyQ.woff ', ' Https://fonts.gstatic.com/s/roboto/v15/d-6IYplOFocCacKzxwXSOD8E0i7KZn-EPnyo3HZu7kw.woff ' ]; Event.waituntil (//Todo:open A cache named ' Wittr-static-v1 ' //ADD cache The URLs
Label:Use the library indexeddb-promised. Create a database and Stroe: Import IDB from ' IDB ';
// Open (db_name, version, CB)
var function (upgradedb) {
var// CREATE TABLE
//put (value, key )
keyvalstore.put (' World ', ' Hello ')
; Notice put () function take value frist then key. Read the key in Stroe: // read "Hello" in "Keyval"
Dbpromise.then (function (db) {
var// Open a transaction
var// read the store
return// Get value by key
}). Then (function (val)
When we save items to indexdb, we need to think about clean the items or keep those in a short list.Indexcontroller.prototype._onsocketmessage =function (data) {varMessages =json.parse (data); This. _dbpromise.then (function (db) {if(!DB)return; vartx = Db.transaction ('Wittrs','ReadWrite'); varstore = Tx.objectstore ('Wittrs'); Messages.foreach (function (message) {store.put (message); }); //Todo:keep The newest, entries in ' Wittrs ',//But delete the rest. // //hint:you can use. open
The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion;
products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the
content of the page makes you feel confusing, please write us an email, we will handle the problem
within 5 days after receiving your email.
If you find any instances of plagiarism from the community, please send an email to:
info-contact@alibabacloud.com
and provide relevant evidence. A staff member will contact you within 5 working days.