Service worker实践 作用

定义:

     Service worke 是一个浏览器提供的独立线程,独立于当前网页的进程,在js主线程注册完之后,,开发者可以用编程的方式自己控制关联的页面,拦截并修改访问和资源请求,不局限于图片,甚至是ajax请求等,细粒度地缓存资源

作用特点

    1.Sevice Worker是独立于页面的一个线程,独立的生命周期,不随着页面的销毁而销毁。

    2.劫持网页 http 请求,若 url 命中预设规则,则转发至 mock server,实现请求预加载。

 

调试 Service Worker

地址栏输入:chrome://inspect/#service-workers

  

Service Worker 日志查看

地址栏输入:chrome://serviceworker-internals

  

      

实践

   页面通信

// app.js

// 加载sw.js这个service worker
navigator.serviceWorker.register('./sw.js')
.then(reg => {
  console.log('SW registered!', reg)
})
.catch(err => console.log('Boo!', err));

// 监听service worker发送过来的消息
navigator.serviceWorker.addEventListener('message', function (event) {
	console.log('Client ' + clientId + ' says: ' + event.data.message)
});

// 页面上有一个按钮,点击之后向service worker发送hello的消息
button.addEventListener('click', function() {
  navigator.serviceWorker.controller.postMessage('hello');
});

  

// sw.js
// 监听页面上发送过来的消息,然后发送给其他页面消息
self.addEventListener('message', function(event){
	var promise = self.clients.matchAll()
  .then(function(clientList) {
    // event.source.id contains the ID of the sender of the message.
    var senderID = event.source.id;

    clientList.forEach(function(client) {
      // Skip sending the message to the client that sent it.
      if (client.id === senderID) {
        return;
      }
      client.postMessage({
        client: senderID,
        message: event.data
      });
    });
  });

  // If event.waitUntil is defined, use it to extend the
  // lifetime of the Service Worker.
  if (event.waitUntil) {
    event.waitUntil(promise);
  }
});

  

上一篇:PWA渐进式web应用


下一篇:Nginx