概述

前几天了解并按照官方文档,成功实现了一个小型的 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. vue项目1-pizza点餐系统2-配置路由跳转

    功能目标:点击导航栏中的菜单.主页.路由跳转到不同的组件,点击谁就在在导航栏下展示谁. 1.在router文件夹中(在用脚手架cli搭建项目时,有个couter的选yes)的index.js中,导入如 ...

  2. EF部分字段修改 自动忽略为null字段

    传入一个实体 student(){id = 1,name = "测试" age = null,sex = null} 下面 是修改的方法 public async Task Edi ...

  3. 绑定异常pom

    绑定:. <build> <resources> <resource> <directory>src/main/resources</direct ...

  4. ceph对接openstack

    一.使用rbd方式提供存储如下数据: (1)image(glance):保存glanc中的image: (2)volume(cinder)存储:保存cinder的volume:保存创建虚拟机时选择创建 ...

  5. ROPE

    #include <ext/rope> using namespace __gnu_cxx; ]; rope<int> x; rope<int> x(a,a + n ...

  6. centos安装mysql的正确方法

    1.官方安装文档 http://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ 2.下载 Mysql yum包 http://dev.mysql.co ...

  7. FPDF_CHAR_INFO

    typedef struct { FX_WCHAR m_Unicode; FX_WCHAR m_Charcode; FX_INT32 m_Flag; FX_FLOAT m_FontSize; FX_F ...

  8. [uboot] (第二章)uboot流程——uboot-spl编译流程(转)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/ooonebook/article/det ...

  9. C标签的用法

    今天做jsp页面,发现无法将后台传过来的时间戳转换成正常的时间格式,于是就想到了C标签,顺便把C标签总结一下 1.引入C标签 <%@ taglib uri="http://java.s ...

  10. tensorflow 中 name_scope和variable_scope

    import tensorflow as tf with tf.name_scope("hello") as name_scope: arr1 = tf.get_variable( ...