其他分享
首页 > 其他分享> > VUE - 启动 PWA ,使用 service-worker 缓存静态文件

VUE - 启动 PWA ,使用 service-worker 缓存静态文件

作者:互联网

VUE - 启动 PWA ,使用 service-worker 缓存静态文件

 

方法1:https://www.jianshu.com/p/8f3ad5021b0a

方法2:https://www.cnblogs.com/lcosima/p/14537877.html

 开发环境:vue2,vuecli4

 

方法1:

在main.js 引用 sw配置

if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('./sw.js').then(function (registration) {
    console.log('Registration successful, scope is:', registration.scope);
  }).catch(function (error) {
    console.log('Service Worker registration failed, error:', error);
  });
}

 

 

在 public 中 创建 sw.js 文件

'use strict';
//使用阿里的CDN
importScripts('https://g.alicdn.com/kg/workbox/3.3.0/workbox-sw.js');

workbox.setConfig({
  modulePathPrefix: 'https://g.alicdn.com/kg/workbox/3.3.0/'
});

if (workbox) {
  console.log(`Yay! Workbox is loaded`);
} else {
  console.log(`Boo! Workbox didn't load`);
}
workbox.routing.registerRoute(
  // Cache CSS files
  /.*\.css/,
  // 使用缓存,但尽快在后台更新
  workbox.strategies.staleWhileRevalidate({
    // 使用自定义缓存名称
    cacheName: 'css-cache',
  })
);
workbox.routing.registerRoute(
  // 缓存JS文件
  /.*\.js/,
  // 使用缓存,但尽快在后台更新
  workbox.strategies.staleWhileRevalidate({
    // 使用自定义缓存名称
    cacheName: 'js-cache',
  })
);

// 模型缓存
workbox.routing.registerRoute(
  new RegExp('http://tile.railplus.com/'),
  workbox.strategies.staleWhileRevalidate({
    cacheName: 'model-cache',
  })
);

// 模型缓存
workbox.routing.registerRoute(
  new RegExp('.+\.b3dm$'),
  workbox.strategies.staleWhileRevalidate({
    cacheName: 'model-cache',
  })
);

// 模型缓存
workbox.routing.registerRoute(
  new RegExp('.+\.gltf$'),
  workbox.strategies.staleWhileRevalidate({
    cacheName: 'model-cache',
  })
);
// 模型缓存
workbox.routing.registerRoute(
  new RegExp('.+\.glb$'),
  workbox.strategies.staleWhileRevalidate({
    cacheName: 'model-cache',
  })
);

// workbox.routing.registerRoute(
//   // 缓存gravatar文件
//   new RegExp('https://cdn\.v2ex\.com/'),
//   // 如果缓存可用,请使用它
//   workbox.strategies.cacheFirst({
//     // 使用自定义缓存名称
//     cacheName: 'gravatar-cache',
//     plugins: [
//       new workbox.expiration.Plugin({
//         // 缓存最多30天
//         maxAgeSeconds: 30 * 24 * 60 * 60,
//       })
//     ],
//   })
// );

 

 

如下这些文件是从缓存读取的,标识为 (serviceworker)

 

 

 

 方法2:

 

 

 

 

 

 

 

 

 配置:

大部分路由都内置的缓存策略来处理的。

workbox.routing.registerRoute(
  match,
  new workbox.strategies.StaleWhileRevalidate()
);
 
workbox.routing.registerRoute(
  match,
  new workbox.strategies.NetworkFirst()
);
 
workbox.routing.registerRoute(
  match,
  new workbox.strategies.CacheFirst()
);
 
workbox.routing.registerRoute(
  match,
  new workbox.strategies.NetworkOnly()
);
 
workbox.routing.registerRoute(
  match,
  new workbox.strategies.CacheOnly()
);

 

 

 路由匹配实例

workbox.routing.registerRoute(
  '/logo.png',
  handler
);

workbox.routing.registerRoute(
  'https://some-other-origin.com/logo.png',
  handler
);

workbox.routing.registerRoute(
  new RegExp('\\.js$'),
  jsHandler
);
 
workbox.routing.registerRoute(
  new RegExp('\\.css$'),
  cssHandler
);

workbox.routing.registerRoute(
  new RegExp('/blog/\\d{4}/\\d{2}/.+'),
  handler
);

workbox.routing.registerRoute(
  new RegExp('.+/blog/\\d{4}/\\d{2}/.+'),
  handler
);


workbox.routing.registerRoute(
  new RegExp('.+\\.js$'),
  jsHandler
);
 
workbox.routing.registerRoute(
  new RegExp('.+\\.css$'),
  cssHandler
);

const matchFunction = ({url, event}) => {
  // Return true if the route should match
  return false;
};
 
workbox.routing.registerRoute(
  matchFunction,
  handler
);

 

 

 

 

参考:https://www.jianshu.com/p/8f3ad5021b0a

参考:https://www.cnblogs.com/lcosima/p/14537877.html

参考:https://blog.csdn.net/lw001x/article/details/103694534

 

标签:缓存,service,registerRoute,worker,VUE,routing,new,workbox,strategies
来源: https://www.cnblogs.com/1285026182YUAN/p/15921906.html