zoukankan      html  css  js  c++  java
  • [PWA] 7. First Cache when installed

    If you want your application works offline or lie-wifi. You need to use cache.

    API:

    Create Caches:

    caches.open('cache_name').then( (cache) => {
        // create name if not exists yet, return cache if there is a one
    })

    Create single cache:

    cache.put(request, response);
    
    cache.addAll([
      '/foo',
      '/bar'
    ])

    Get the cache:

    cache.match(request)
    
    caches.match(request)

    When to start cache:

    We can do cache in 'installing' service worker, what it will do is fetch everything we need from network and create cache for each of them.

    self.addEventListener('install', function(event) {
      var urlsToCache = [
        '/',
        '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 from urlsToCache
          caches.open('wittr-static-v1')
              .then( (cache) => {
                  cache.addAll(urlsToCache)
              })
              .catch( () => {
                  console.error("Cannot cache anything");
              })
      );
    });

    Now we have create the cache, but it is not useful until we use the cache.

    To use cache, we can do:

    self.addEventListener('install', function(event) {
      var urlsToCache = [
        '/',
        '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 from urlsToCache
          caches.open('wittr-static-v4')
              .then( (cache) => {
                  cache.addAll(urlsToCache)
              })
              .catch( () => {
                  console.error("Cannot cache anything");
              })
      );
    });
    
    self.addEventListener('fetch', function(event) {
        event.respondWith(
            caches.match(event.request).then((response)=>{
                if(response){
                    return response;
                }else{
                    return fetch(event.request);
                }
            })
        )
    });

    So we use 'caches.match' to get all the caches for request.

    In the then block, cache is successfully fetched, we check whether there is cache data, if it is, then return the response;

    If there is no cache data, then we fetch the data from real-server.

    But this approach has some problem:

    After we go offline mode, the pictures are not showing, this is because we only cache when the servcie worker is installed. 

    So here is some problem we need to solve:

  • 相关阅读:
    drupal drush 在windows下的安装和配置
    Drupal 7 配置ckeditor和ckfinder编辑器实现图片上传--不用wysisyg
    阿里云Centos配置iptables防火墙
    25个最常用的iptables策略
    防简单攻击iptables策略
    iptables防DDOS攻击和CC攻击设置
    Linux Web服务器网站故障分析常用的命令
    Linux/CentOS防CC攻击脚本
    Map字符串类型去掉空格处理
    读文件字节流大小的动态设置
  • 原文地址:https://www.cnblogs.com/Answer1215/p/5499313.html
Copyright © 2011-2022 走看看