前言

  • 中国有不一样的MobileFirst战略,重原生应用,轻移动网页;
  • 移动网页的弱势:页面设计优化有限,用户体验受网络环境影响,网页开启不方便;
  • web优势是产品分发
  • app优势是产品使用和交互

一. PWA带来的特性

  • 能够显著提高应用加载速度,快速响应,并且有平滑的动画响应用户的操作
  • 甚至让 web 应用可以在离线环境使用 (Service Worker & Cache API),即使在不稳定的网络环境下,也能瞬间加载并展现
  • web 应用能够像原生应用一样被添加到主屏、全屏执行 (Web App Manifest),具有沉浸式的用户体验
  • 进一步提高 web 应用与操作系统集成能力,让 web 应用能在未被激活时发起推送通知 (Push API 与 Notification API)

二. 相关技术

  • Service Worker
  • App Manifest(将APP安装至主屏幕)
  • Push API(服务端消息推送,ios目前不支持)
  • Notifications API(允许App向用户显示系统通知,目前201808移动端不支持)
  • Background Sync(延迟发动用户行为,直至网络稳定)
  • IndexedDB(本地nosql数据库)

三. Service Worker生命周期(下图来自https://bitsofco.de/the-service-worker-lifecycle/

  • install 事件中一般会将 cacheList(注册成功后要立即缓存的资源列表) 中要缓存的内容通过 addAll 方法,请求一遍放入 caches 中
  • active 事件中通常做一些过期资源释放的工作,匹配到就从 caches 中删除
  • fetch事件中编写缓存策略

四. 注销所有Service Worker,可以用getRegistrations

let sw = navigator.serviceWorker;
sw.getRegistrations ? sw.getRegistrations().then(function(sws) {
sws.forEach(function(s) {
s.unregister();
});
}) : sw.getRegistration && sw.getRegistration().then(function(s) {
s && s.unregister();
});

五. 一些关于Service Worker的特点

  • 要求https或本地localhost;
  • 运行在它自己的全局脚本上下文中(self);不绑定到具体的网页,无法访问dom等对象;
  • 一旦被 install,就永远存在,除非被手动 unregister;
  • 异步实现基于 Promise和fetch;
  • Service Worker 的缓存机制是依赖 Cache API实现的;
  • 注销了Service Worker,cache还是要手动delete的;
  • event.waitUntil() 传入一个 Promise 为参数,等到该 Promise 为 resolve 状态为止;
  • self.skipWaiting() 执行该方法表示强制当前处在 waiting 状态的 Service Worker 进入 activate 状态;
  • self.clients.claim() 在 activate 事件回调中执行该方法表示取得页面的控制权, 这样之后打开页面都会使用版本更新的缓存。旧的 Service Worker 脚本不再控制着页面,之后会被停止;
  • 为保证首屏渲染性能,可以把Service Worker放在页面onload回调函数里注册;

六. Manifest

  • 支持 HTTPS 访问
  • 注册 Service Worker
  • 部署 manifest.json (<link rel='manifest' href='./manifest.json'>)

七. Workbox

GoogleChrome 团队推出的一套 Web App 静态资源和请求结果的本地存储的解决方案,该解决方案包含一些 Js 库和构建工具

PWA小记的更多相关文章

  1. [原]Paste.deploy 与 WSGI, keystone 小记

    Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. ...

  2. MySql 小记

    MySql  简单 小记 以备查看 1.sql概述 1.什么是sql? 2.sql发展过程? 3.sql标准与方言的关系? 4.常用数据库? 5.MySql数据库安装? 2.关键概念 表结构----- ...

  3. Git小记

    Git简~介 Git是一个分布式版本控制系统,其他的版本控制系统我只用过SVN,但用的时间不长.大家都知道,分布式的好处多多,而且分布式已经包含了集中式的几乎所有功能.Linus创造Git的传奇经历就 ...

  4. 广州PostgreSQL用户会技术交流会小记 2015-9-19

    广州PostgreSQL用户会技术交流会小记 2015-9-19 今天去了广州PostgreSQL用户会组织的技术交流会 分别有两个session 第一个讲师介绍了他公司使用PostgreSQL-X2 ...

  5. 东哥读书小记 之 《MacTalk人生元编程》

         一直以来的自我感觉:自己是个记性偏弱的人.反正从小读书就喜欢做笔记(可自己的字写得巨丑无比,尼玛不科学呀),抄书这事儿真的就常发生俺的身上. 因为那时经常要背诵课文之类,反正为了怕自己忘记, ...

  6. Paypal支付小记

    Paypal支付小记 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !impo ...

  7. linux 下cmake 编译 ,调用,调试 poco 1.6.0 小记

    上篇文章 小记了: 关于 Poco::TCPServer框架 (windows 下使用的是 select模型) 学习笔记. http://www.cnblogs.com/bleachli/p/4352 ...

  8. mongodb入门学习小记

    Mongodb 简单入门(个人学习小记) 1.安装并注册成服务:(示例) E:\DevTools\mongodb3.2.6\bin>mongod.exe --bind_ip 127.0.0.1 ...

  9. 【日常小记】统计后缀名为.cc、.c、.h的文件数【转】

    转自:http://www.cnblogs.com/skynet/archive/2011/03/29/1998970.html 在项目开发时,有时候想知道源码文件中有多少后缀名为.cc..c..h的 ...

随机推荐

  1. workerman定时任务使用

      定时任务在有些场合很实用,像淘宝的自动确认收货就必须放在服务端进行,这时workeran的定时任务就派上用场了,它可以支持毫秒,crontab的粒度是一分钟 需要注意的是因为定时任务一直在执行,业 ...

  2. Django初级手册1-项目和应用的创建与简单的数据库操作

    创建项目 django-admin.py startproject mysite 1. 目录结构 mysite/ #项目的名称 manage.py #可通过命令和项目进行交互的文件 mysite/ # ...

  3. Putty Technical Note

    转载自:http://libai.math.ncu.edu.tw/bcc16/6/putty/puttyt.html Terminal panel Terminal 面板可調整 PuTTY 對於模擬終 ...

  4. MySQL Crash Course #13# Chapter 21. Creating and Manipulating Tables

    之前 manipulate 表里的数据,现在则是 manipulate 表本身. INDEX 创建多列构成的主键 自动增长的规定 查看上一次插入的自增 id 尽量用默认值替代 NULL 外键不可以跨引 ...

  5. Python3 获取网络图片并且保存到本地

    Python3 获取网络图片并且保存到本地 import requests from bs4 import BeautifulSoup from urllib import request impor ...

  6. 获取Json字符串中的key和value

    获取Json字符串中的key和value 在web项目中经常会用到json数据(如:struts2处理请求返回json数据给jsp解析),因此,JSONObject对象是必备的,这时就需要引入相关的j ...

  7. 2018-2019-1 20189218《Linux内核原理与分析》第五周作业

    系统调用的三层机制 用户态.内核态和中断 用户态.较低的执行级别,只能访问一部分内存,只能执行一部分指令. 内核态.高级执行级别,可以访问任意物理内存,可以执行特权指令. 中断.系统从用户态进入内核态 ...

  8. 《网络对抗》——逆向及Bof基础实践

    <网络对抗>--逆向及Bof基础实践 原理 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 手工修改可执行文件,改变程序执行流程,直接跳转到g ...

  9. libcurl开源库在Win32程序中使用下载文件显示进度条实例

    一.配置工程引用libcurl库 #define CURL_STATICLIB #include "curl/curl.h" #ifdef _DEBUG #pragma comme ...

  10. CSS 常用语法与盒模型分析

    CSS基础知识 CSS规则由两个主要的部分构成:选择器,以及一条或者多条声明 selector { property: value; property: value; ... property: va ...