概述

前几天了解并按照官方文档,成功实现了一个小型的 pwa demo,现在把总结记录下来,供以后开发时参考,相信对其他人也有用。

pwa

pwa 包括很多内容,我这里只介绍一部分,因为比如 Push&Notification 我并没有实际练手过。

参考资料:

Your First Progressive Web App

pwa 缓存策略

pwa app 的快速和离线体验是通过 service worker(SW) 来实现的。那到底它的缓存策略是怎样的呢?

首先,SW 有一个 CACHE_NAME,这个相当于 http 里面的 e-tag,一般通过这个来标记 SW 缓存的版本,我们通过 SW 判断 CACHE_NAME 是否发生改变,如果发生改变,我们能够自定义要进行的操作,比如删除旧版本缓存,发起 http 请求,缓存新版本。

然后,SW 不仅能缓存静态资源,还能够缓存接口返回的数据。SW 可以拦截 http 请求,然后判断缓存里面是否有这个接口缓存的数据,如果有就可以拿来使用,如果没有就再发起 http 请求来请求数据。

最后,每当我们发起 http 请求的时候,一般我们会用 SW 判断缓存里面有没有数据,有则立即使用数据,同时还可以发起 http 请求来获取最新数据;如果没有就直接发起 http 请求获取新数据。这一策略有2个好处:

  1. 假如我们用 SW 缓存了所有 http 请求的数据,那么就算是在离线情况下,app 也能够正常运行,造成了良好的离线体验
  2. 当 SW 的缓存命中的时候,会立即适用缓存里面的数据,没有等待时间,所以 app 会很快速
  3. 不需要担心版本问题。就算 SW 缓存的数据不是最新的,我们也可以在适用缓存的同时,发起 http 请求获取新数据,然后比较新数据和旧数据有没有改变,如果有则适用新数据(当然也可以直接适用新数据)。

SW 的生命周期

SW 有3个很重要的生命周期:

  1. install: 当 SW 下载完成之后,就会执行 install,安装 SW。注意,在这个阶段,SW 对页面是不起作用的,并不能代理 http 请求。
  2. active: 当 SW 安装完成之后,并不会立即适用,它会在下次页面刷新或者打开的时候才会适用,所以初次打开页面的时候 SW 并不能代理 http 请求。如果这个时候页面已经有老的 SW,那么老的 SW 仍然会继续运行。
  3. waiting: 在 install 和 active 之间 SW 是属于 waiting 阶段,这个严格来说并不是生命周期,因为它没有一个回调。

我们一般在 install 生命周期里面添加要缓存的内容,比如静态资源,http 路径等。然后在 active 生命周期内清除旧的缓存,最后监听 fetch 事件,代理 http 请求。

pwa 总结的更多相关文章

  1. 说说 PWA 和微信小程序--Progressive Web App

    作者:云图图链接:https://zhuanlan.zhihu.com/p/22578965来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 利益相关:微信小用户,谷歌小 ...

  2. [PWA] Keynote: Progressive Web Apps across all frameworks

    PWA: Add to home screen Angular Universal Server side rendering: for achieving better proference on ...

  3. PWA - 渐进式网络应用初认识

    Progressive Web Apps 简称PWA,是一种接近原生用户体验的渐进增强的web-app.从浏览器演进而来,沉浸式的体验,改进web的性能低下等.是Google 在2015年提出,今年才 ...

  4. 轻松把你的项目升级到PWA

    什么是PWA PWA(Progressive Web Apps,渐进式网页应用)是Google在2015年推出的项目,致力于通过web app获得类似native app体验的网站. 优点 1.无需客 ...

  5. PWA学习心得

    PWA学习心得 一.什么是PWA Progressive  Web  App , (渐进式增强 WEB 应用) 简称 PWA ,是提升WebApp的体验的一种新方法,能给用户原生应用的体验. PWA ...

  6. hexo 博客支持PWA和压缩博文

    目标网站 https://blog.rmiao.top/ PWA yarn add hexo-offline 然后在root config.yml里新增 # offline config passed ...

  7. 震撼功能:逐浪CMS全面支持PWA移动生成意指未来

    Progressive Web App, 简称 PWA,是提升 Web App 的体验的一种新方法,能给用户原生应用的体验. PWA 能做到原生应用的体验不是靠特指某一项技术,而是经过应用一些新技术进 ...

  8. 新事物学习---Chrome上使用PWA

    PWA是什么 PWA(Progressive Web Apps)是 Google 最近在提的一种 Web App 形态 (或者如 Wikipedia 所称的"软件开发方法").PW ...

  9. Angular 学习笔记 ( PWA + App Shell )

    PWA (Progressive Web Apps) 是未来网页设计的方向. 渐进式网站. Angular v5 开始支持 pwa 网站 (所谓支持意思是说有一些 build in 的方法和规范去实现 ...

  10. PWA初体验

    一.前言 现在市面上的Native  APP成千上万个,各种应用商店里面的APP琳琅满目.原生的APP下载到手机上之后,用户就可以获取一个方便的入口,体验上也十分顺畅.但是再好的事物难免有点缺点: 1 ...

随机推荐

  1. npm 命令行基本操作

    npm命令选项选项            说明search 在存储库中查找模块包 npm search expressinstall  使用在存储库或本地位置上的一个package.json文件来安装 ...

  2. js数组与对象的区别

    数组和对象两者都可以用来表示数据的集合,曾一度搞不清楚”数组”(array)和”对象”(object)的根本区别在哪里. 有一个数组a=[1,2,3,4],还有一个对象a={0:1,1:2,2:3,3 ...

  3. 动态class,style,src绑定写法 vue

    :class="{active:menuName===item.title}" :style="thisTitle==='一张图展示'?styles:''" : ...

  4. Linux练习例题(附答案)

    1.通过ps命令的两种选项形式查看进程信息 2.通过top命令查看进程 3.通过pgrep命令查看sshd服务的进程号 4.查看系统进程树 5.使dd if=/dev/zero of=/root/fi ...

  5. 学习-Pytest(三)setup/teardown

    1. 用例运行级别 模块级(setup_module/teardown_module)开始于模块始末,全局的 函数级(setup_function/teardown_function)只对函数用例生效 ...

  6. java面试01-网络知识

    1.网络七层协议 第一层:物理层 机械.电子.定时接口通信信道上的原始比特流传输 第二层:数据链路层 物理寻址,同时将原始比特流转变为逻辑传输线路 第三层:网络层 控制子网的运行‘如逻辑编址.分组传输 ...

  7. HelloWorld的解析

    public class HelloWorld { public static void main(String[] args) { System.out.println("你好,世界!&q ...

  8. 深入理解JAVA虚拟机 虚拟机性能监控和故障处理工具

    jre的bin目录下的工具,都非常小.它都是tools.jar下面的代码的一层封装而已.tools.jar不是java标准,是Hotspot实现的. 名称 作用 jps JVM Process Sta ...

  9. python 后台 安装 富文本编辑

    前言 当然需要安装一些后台只能输入一些文本编辑器,不然这样多少不美观呀 当然python 有 safe 可以把后台的标签转换 , 还有 striptags   这个是换成html 格式的,但不会加粗或 ...

  10. 【Linux】CentOS6上redis安装

    1.官网下载安装包 https://redis.io 2.解压 tar -zxvf xxxx.tar.gz 3.编译安装 进入解压后的目录后 make 出现以下内容表示make成功 Hint: It' ...