未经作者许可

打赏支持我写出更多好文章,谢谢!

任选一种支付方式

图片 1
图片 2

1 赞 1 收藏
评论

迈向PWA!利用serviceworker的离线访问模式

2017/02/08 · JavaScript
· PWA

本文作者: 伯乐在线
pangjian
。未经作者许可,禁止转载!
欢迎加入伯乐在线 专栏作者

微信小程序来了,可以利用WEB技术在微信打造一个有着Native应用体验的应用,业界非常看好这种形式。但是你们也许不知道,Google早已有类似的规划,甚至层次更高。那就是PWA(渐进式增强WEB应用)。
PWA有以下几种特性:

  • Installablity(可安装性)
  • App Shell
  • Offline(离线能力)
  • Re-engageable(推送通知能力)

所有这些特性都是“优雅降级、渐进增强的”,给支持的设备更好的体验,不支持的设备也不会更差。这就和微信小程序这种二流设计的根本不同之处。

本博客也在向着PWA的方向迈进,第一步我选择了Offline,也就是离线能力。可以让客户在没有网络连接的时候仍然可以使用部分服务。这个能力利用了Service
Worker技术。

实现思路就是,利用service
worker,另起一个线程,用来监听所有网络请求,讲已经请求过的数据放入cache,在断网的情况下,直接取用cache里面的资源。为请求过的页面和图片,展示一个默认值。当有网络的时候,再重新从服务器更新。
图片 3
代码这里就不贴了,以后可能会专门写一篇来详细介绍Service
Worker,有兴趣的可以直接参考源码
注册起来也非常方便

JavaScript

// ServiceWorker_js (function() { ‘use strict’;
navigator.serviceWorker.register(‘/sw.js’, {scope:
‘/’}).then(function(registration) { // Registration was successful
console.log(‘ServiceWorker registration successful with scope: ‘,
registration.scope); }).catch(function(err) { // registration failed 🙁
console.log(‘ServiceWorker registration failed: ‘, err); }); })();

1
2
3
4
5
6
7
8
9
10
11
12
// ServiceWorker_js
(function() {
    ‘use strict’;
    navigator.serviceWorker.register(‘/sw.js’, {scope: ‘/’}).then(function(registration) {
      // Registration was successful
      console.log(‘ServiceWorker registration successful with scope: ‘, registration.scope);
    }).catch(function(err) {
      // registration failed 🙁
      console.log(‘ServiceWorker registration failed: ‘, err);
    });
 
})();

这里需要注意的是,sw.js所在的目录要高于它的控制范围,也就是scope。我把sw.js放在了根目录来控制整个目录。

接下来看看我们的最终效果吧,你也可以在自己的浏览器下断网尝试一下。当然有部分浏览器目前还不支持,比如大名鼎鼎的Safari。

离线无缓存情况

会展示一个默认的页面

图片 4

-EOF-

打赏支持我写出更多好文章,谢谢!


打赏作者

离线有缓存情况

图片 5

关于作者:pangjian

图片 6

庞健,金融IT男。
个人主页
·
我的文章
·
5
·
  

图片 7

发表评论

电子邮件地址不会被公开。 必填项已用*标注