Service Worker 的一个实战例子

简介: Service Worker 的一个实战例子

关于 Service Worker 概念的例子,请参考我之前的这篇文章。本文是实战。

本地新建一个 html 文件,该文件里加载一个 Service worker 的实现:image.png该 HTML 加载的 Service Worker 实现,位于 sw.js 文件内:

// @ts-nocheck
var CACHE_NAME = 'my-site-cache-v1';
var urlsToCache = [
  '/',
  '/purehtml/serviceworker.html'
];
self.addEventListener('install', function(event) {
  // Perform install steps
  // @ts-ignore
  event.waitUntil(
    caches.open(CACHE_NAME)
      .then(function(cache) {
        console.log('Opened cache');
        return cache.addAll(urlsToCache);
      })
  );
});
self.addEventListener('fetch', function(event) {
    event.respondWith(
      caches.match(event.request)
        .then(function(response) {
          // Cache hit - return response
          if (response) {
            console.log('Cache hit: ', response);
            return response;
          }
          return fetch(event.request).then(
            function(response) {
              // Check if we received a valid response
              if(!response || response.status !== 200 || response.type !== 'basic') {
                return response;
              }
              // IMPORTANT: Clone the response. A response is a stream
              // and because we want the browser to consume the response
              // as well as the cache consuming the response, we need
              // to clone it so we have two streams.
              var responseToCache = response.clone();
              caches.open(CACHE_NAME)
                .then(function(cache) {
                  cache.put(event.request, responseToCache);
                });
              return response;
            }
          );
        })
      );
  });

一定要把该 html 和 JavaScript,发布到 web server 上运行(比如使用 Node.js 的 express 框架)。


如果本地直接打开 HTML,会遇到错误:ServiceWorker registration failed:TypeError:failed to register a ServiceWorker:The URL protocol of the current origin(‘null’) is not supported.image.pngServiceWorker registration successful with scope:

刷新之后,可以看到该应用的 Cache Storage 里,已经显示了两条缓存数据:image.png看到了处于 active 状态的 Service Worker:

image.png如果一个网页是通过 Service Worker 返回的,在 Chrome 开发者工具里能看到对应的图标:image.png



相关文章
在Activtiy和在Service中创建一个Thread的区别?
在Activtiy和在Service中创建一个Thread的区别?
68 0
|
5月前
|
存储 缓存 算法
关于 Service Worker 和 Web 应用对应关系的讨论
关于 Service Worker 和 Web 应用对应关系的讨论
|
10月前
|
Kubernetes 监控 Cloud Native
k8s 自身原理之 Service
k8s 自身原理之 Service
|
10月前
|
存储 缓存 前端开发
WorkBox 之底层逻辑Service Worker(一)
WorkBox 之底层逻辑Service Worker(一)
|
10月前
|
存储 Web App开发 缓存
WorkBox 之底层逻辑Service Worker(二)
WorkBox 之底层逻辑Service Worker(二)
151 0
|
Android开发
Service和Thread有什么关系
其实我们最大的疑惑莫过于,认为Thread也可以在后台执行,显然这是错误的,你觉得在一个Activity里new一个Thread,在run方法里执行一些定时耗时操作,应用退出进程不死的情况下,run方法里还会执行吗?显然是不会的
Service和Thread有什么关系
|
域名解析 Kubernetes 负载均衡
k8s service 概念和原理
详细讲解k8s的概念和原理
792 0
k8s service 概念和原理
|
监控 安全 Serverless
AAS即As-a-Service的概念
列举一些接触到的AAS即As-a-Service的概念
454 0
|
Android开发 Kotlin
Service以及多线程初步
Android里面更新UI必须在主线程中更新,子线程中不能更新UI,kotlin有其简化的开启线程方法
82 0
|
Kubernetes 网络协议 开发者
K8S 集群核心概念 Service 删除 Service 及学习总结 | 学习笔记
快速学习 K8S 集群核心概念 Service 删除 Service 及学习总结
1675 0
K8S 集群核心概念 Service 删除 Service 及学习总结 | 学习笔记