js操作serviceWorker缓存静态文件

js操作serviceWorker缓存静态文件

serviceWorker的作用就是用来做离线应用的,在手机端程序中用的较多

  1. 先看下效果

  2. index.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <style>
            .box{
                background-image: url("./img/alt.png");
                width: 100px;
                height: 100px;
            }
        </style>
    </head>
    <body>
        <!-- <img src="./img/alt.png" > -->
        <div class="box"></div>
        <script>
            if(navigator.serviceWorker) {
                navigator.serviceWorker.register(‘./sw.js‘).then(function(res){
                    console.log(res.scope + "->" + "service worker注册成功");
                }).catch(function(err){
                    console.log(err);
                })
            }else{
                alert("你的浏览器不支持serviceWorker");
            }
        </script>
    </body>
    </html>
  3. sw.js
    var version = "v1::"; // 设置版本号
    
    self.addEventListener("install", function (event) { // serviceworker第一次加载的时候调用,可以在此时缓存静态资源
        event.waitUntil(
            // caches帮助我们缓存资源
            caches
                .open(version + ‘fundamentals‘)
                .then(function (cache) {
                    // 将列出的文件缓存起来
                    return cache.addAll([
                        ‘/‘,
                        ‘/img/alt.png‘
                    ]);
                })
                .then(function () {
                    console.log(‘缓存完毕‘);
                })
        );
    });
    
    self.addEventListener(‘activate‘, function (event) { // install方法调用完毕后就调用此方法,主要用来删除过期的缓存
    
        event.waitUntil(
            caches
                // keys方法用来获取缓存版本号
                .keys()
                .then(function (keys) {
                    // 下面的方法用来删除不是以version开头的缓存版本
                    return Promise.all(
                        keys
                            .filter(function (key) {
                                return !key.startsWith(version);
                            })
                            .map(function (key) {
                                return caches.delete(key);
                            })
                    );
                })
                .then(function () {
                    console.log(‘WORKER: 激活完毕.‘);
                })
        );
    })
    
    self.addEventListener(‘fetch‘, function (event) { // 请求外部资源时调用
    
        // 只捕获get请求
        if (event.request.method !== ‘GET‘) {
            // 只让get请求去缓存中查找
            console.log(‘WORKER: 被拦截的api.‘, event.request.method, event.request.url);
            return;
        }
    
        // 让get请求取缓存中查找资源
        event.respondWith(
            caches
                .match(event.request)
                .then(function (cached) {
                    // 将缓存中的资源立即返回,并且同时去服务器下载最新的资源存到缓存中
                    var networked = fetch(event.request)
                        .then(fetchedFromNetwork, unableToResolve)
                        .catch(unableToResolve);
    
                    // 通过caches.match这个方法,如果缓存中有资源,直接就返回了,如果没有转向网络
                    console.log(‘WORKER: fetch event‘, cached ? ‘(cached)‘ : ‘(network)‘, event.request.url);
                    return cached || networked;
    
                    function fetchedFromNetwork(response) {
                        // 从网络中加载资源
                        var cacheCopy = response.clone();
                        console.log(‘WORKER: 从网络中拉取的资源地址.‘, event.request.url);
                        caches
                            // 存储资源
                            .open(version + ‘pages‘)
                            .then(function add(cache) {
                                cache.put(event.request, cacheCopy);
                            })
                            .then(function () {
                                console.log(‘WORKER: 从网络中拉取的资源已经缓存‘, event.request.url);
                            });
                        return response;
                    }
    
                    // 既不能从网络中获取资源又不能从缓存中获取,就会调用此方法
                    function unableToResolve() {
                        console.log(‘WORKER: 获取资源失败.‘);
                        return new Response(‘<h1>Service Unavailable</h1>‘, {
                            status: 503,
                            statusText: ‘Service Unavailable‘,
                            headers: new Headers({
                                ‘Content-Type‘: ‘text/html‘
                            })
                        });
                    }
                })
        );
    })

原文地址:https://www.cnblogs.com/ye-hcj/p/10352974.html

时间: 2024-08-03 07:37:32

js操作serviceWorker缓存静态文件的相关文章

Nginx设置Js、Css等静态文件的缓存过期时间

location ~.*\.(js|css|html|png|jpg)$ { expires 3d; } expires    3d; //表示缓存3天 expires    3h; //表示缓存3小时 expires    max; //表示缓存10年 expires    -1; //表示永远过期. 如果设置为-1在js.css等静态文件在没有修改的情况下返回的是http 304,如果修改返回http 200 http 304:自从上次请求后,请求的网页未修改过.服务器返回此响应时,不会返回

apache下用expires_module让浏览器缓存静态文件

apache下用expires_module让浏览器缓存静态文件 apache配置静态缓存的原因: 第一点,       减轻服务器的压力. 第二点,       省去浏览器经常要去服务端下载CSS.JS.图片.静态文件等,减小不必要的网络IO. 配置步骤: 1. 在apache主配置文件中开启apache扩展模块mod_expires.so,命令: Vi /usr/local/apache2/conf/httpd.conf,如下图所示: 2. 配置缓存,在apache的虚拟主机(/usr/lo

tomcat 无法加载js和css 等静态文件的问题

前段时间做了个网站,在本地tomcat测试都没有问题,但是部署到阿里云上之后,系统样式全没了.jsp等动态页面访问正常. 打开浏览器监控发现所有的css 和js 文件返回都是404 .直接访问单个的css 文件也同样是404.以为是路径错了,于是一一对了一遍各个文件的路径和服务器上 tomcat路径方面的设置 发现路径没有问题.在网站更目录创建一个css文件和html文件均不能访问.确认不是网站路径的问题. 然后怀疑是tomcat 和 Apache 冲突了,或者可能是Apache 的设置不对.因

Eclipse中使用Tomcat加载项目在浏览器中访问的时候JS和CSS等静态文件无法加载的问题

首先,我的Eclipse是引用外部的Tomcat 引用外部Tomcat会在左侧生成一个Server文件夹,相当于复制了一份Tomcat到Eclipse的安装目录里 具体Tomcat所在目录可以在这进行查看 双击Tomcat服务,会打开一个窗口,然后点击Open launch configuration,可打开配置窗口,在这里可以查看到具体服务所在位置. 接下来步入正题,正如题目所说,Eclipse中使用Tomcat加载项目在浏览器中访问的时候JS和CSS等静态文件无法加载,如图 仔细看下路径,会

霸气!Nginx 中缓存静态文件秘籍

导读 这篇教程说明你应该怎样配置 nginx.设置 HTTP 头部过期时间,用 Cache-Control 中的 max-age 标记为静态文件(比如图片. CSS 和 Javascript 文件)设置一个时间,这样用户的浏览器就会缓存这些文件.这样能节省带宽,并且在访问你的网站时会显得更快些(如果用户第二次访问你的网站,将会使用浏览器缓存中的静态文件). 1.准备事项 我想你需要一个正常工作的 nginx 软件,可以查看另一篇的帖子:在 Ubuntu 16.04 LTS 上安装 Nginx,P

如何在 nginx 中缓存静态文件

这篇教程说明你应该怎样配置 nginx.设置 HTTP 头部过期时间,用 Cache-Control 中的 max-age 标记为静态文件(比如图片. CSS 和 Javascript 文件)设置一个时间,这样用户的浏览器就会缓存这些文件.这样能节省带宽,并且在访问你的网站时会显得更快些(如果用户第二次访问你的网站,将会使用浏览器缓存中的静态文件). 1.准备事项 我想你需要一个正常工作的 nginx 软件,就像这篇教程里展示的:在 Ubuntu 16.04 LTS 上安装 Nginx,PHP

virtualBox 虚拟机下nginx设置不缓存静态文件不起作用解决办法

最近开发的时候,调整js时会一直使用缓存文件,无法显示改动!nginx配置静态文件add_header Cache-Control no-cache;也不起作用,很苦恼! nginx配置代码:events { worker_connections 768; # multi_accept on;} http { ## # Basic Settings ## sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types

Django使用js,css等静态文件的时候,出现mime类型问题

使用adminLTE模板, return render(request, 'AdminLTE/index.html') 的时候报如下错误且页面渲染异常,css没有效果: Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://127.0.0.1:8000/host/index/plugins/iCheck/flat/blue.css". 报错截图: 原因: 问题解决了,其实

Fiddler过滤css、js、图片等静态文件

REGEX:(?insx)/[^\?/]*\.(css|ico|jpg|png|gif|bmp|wav)(\?.*)?$ REGEX:(?insx)/[^\?/]*\.(action|do)(\?.*)?$ 原文地址:https://www.cnblogs.com/wangjizhen/p/11317643.html