前言

之前自己根据网上的教程学习写了几个PWA的小Demo,觉得PWA很有意思,想要更多的了解一下PWA,所以读了这本书。这本书是MANNIN出版社出的,所以书里的代码都有非常棒的注释,因此这篇笔记不会展开讲代码,而是着重于描述PWA的功能以及常见的问题和解决方法。

  • 图书资源
  • 图书中代码的Github仓库

1. 什么是PWA

简单来说,PWA是一系列新兴技术的统称,这些技术旨在增强web app的功能,使其能够在用户体验上媲美原生应用。PWA的功能包括:

  • 响应性:可以适配更小的屏幕
  • 连接独立性:因为service worker的缓存,它使网页可以离线工作
  • 类似原生应用的交互性:使用应用程序外壳架构(app shell)来构建
  • 安全性:基于HTTPS协议
  • 可发现性:搜索引擎能够发现它(SEO好)
  • 可安装性:可以添加到桌面像原生应用一样启动(基于manifest技术)
  • 可链接性:可以很容易的通过URL进行分享

1.1 网站性能测试工具

  • Lighthouse
  • webpagetest

Lighthouse会生成性能测试报告,但是测试结果会受网络质量的影响。webpagetest是真机测试,但是测试可选地点和浏览器是有限的,有时候还要排队等待。但不管怎样,这些测试工具可以辅助我们测试自己的站点,让我们了解到自己站点现在存在的性能问题,然后着手改善,相信PWA技术会让你的改善变得更加简单快捷,而且效果显著。最最重要的是,PWA是渐进增强的,不需要重写已经存在的代码!!

2. PWA的主要技术

2.1 Service Worker

2.1.1 service worker的功能

简单来说,service worker可以拦截请求(fetch request),可以给出响应(response)。你可以对拦截下来的请求做处理,比如说你发现缓存中已经有了请求的资源,而且资源还在有效期内,你就可以直接从缓存中读取资源终止请求。如果在service worker的安装阶段就缓存好了一些资源,这样再次访问时可以直接从缓存中加载部分资源,页面加载速度会大幅度提升。即使是离线访问页面也可以给出之前缓存好的信息,极大的提升了用户的体验感。可以使用Google的工具库Workbox写service worker文件,里面提供了很多易用的API以及各种缓存策略。

2.1.2 service worker的特点

  • 基于HTTPS协议
  • 运行在自己的全局脚本上下文中
  • 不是绑定到一个特定的web页面
  • 无法修改web页面中的元素,无法访问DOM
  • 每次对service worker文件进行任何更改时,它都会自动触发service worker更新流。

2.1.3 service worker的调试

可以通过Google的开发者工具Application里面的Service Workers进行调试。

2.1.4 service worker常见问题

1) 缓存更新问题

方法1】:因为修改service worker文件会触发service worker的更新流,所以想要更新缓存时,可以修改缓存名(cacheName),例如将helloWorld改成helloWorld-2

方法2】:Cache busting技术(作者更推荐),给文件打上版本号,例如:

<script type="text/javascript" src=“/js/main-xtvbas65.js"></script>
复制代码

这种技术被称为缓存总线技术,已经出现了很多年。当一个静态文件被缓存时,它可以被存储很长一段时间,直至到期。如果你更新了一个网站,但由于文件的缓存版本存储在访问者的浏览器中,他们可能看不到所做的更改。缓存总线通过使用唯一的文件版本标识符告诉浏览器文件的新版本是可用的。

2) 拦截请求时怎么忽略查询字符串参数
caches.match(event.request, { ignoreSearch: true })
复制代码

2.2 Manifest

2.2.1 manifest的功能

让web app可以像原生应用一样添加图标到桌面,然后通过桌面图标启动。可配置图标,启动动画等,详细配置见文档。

2.2.2 manifest的调试

可以通过Google的开发者工具Application里面的Manifest进行调试。

2.2.3 manifest常见问题

1) 怎么让添加到主屏幕的横幅显示出来

要让添加到主屏幕的横幅显示出来,必修满足以下条件:

  • 需要 manifest.json文件。
  • 需要一个启动的URL
  • 需要 144 x 144 的PNG图标
  • 网站必须基于HTTPS协议,并且使用Service Worker
  • 用户必须访问了网站至少两次, 每次至少有五分钟

2.3 Push notifications

2.3.1 Push notifications的功能

即使用户不打开浏览器也可以接收到消息,原生的API写起来有一些麻烦,可以借助第三方的工具库来写,例如OneSignal, Aimtell等。

2.4 Synchronous data

Background sync是Google新推出的Web API,可延迟用户行为,直到用户网络连接稳定。这样有助于保证用户想要发送的数据就是实际发送的数据。

PeriodicSync还在开发中,它可以实现定期同步。

3. 用PWA提升用户体验的例子

3.1 假wifi和单点故障问题

如下面的代码所示可以设置超时时间,用Promise的race函数让超时函数和正常的请求竞跑,如果到超时时间请求还未得到相应则抛出超时错误,这样可以及时让用户了解到出现了网络故障。

function timeout(delay) {return new Promise(function(resolve, reject) = >{setTimeout(function() {resolve(new Response('', {status: 408,statusText: 'Request timed out.'}));},delay);});
};self.addEventListener('fetch', function(event) {if (/googleapis/.test(event.request.url)) {event.respondWith(Promise.race([timeout(3000), fetch(event.request.url)]));} else {event.respondWith(fetch(event.request));}
});
复制代码

上面的代码看上去有一点繁琐,我们可以借助Google的工具库Workbox来简化以上代码

importScripts('workbox-sw.prod.v1.1.0.js');
const workboxSW = new self.WorkboxSW();
workboxSW.router.registerRoute('https://fonts.googleapis.com/(.*)', workboxSW.strategies.cacheFirst({cacheName: 'googleapis',networkTimeoutSeconds: 3
}));
复制代码

4. PWA的未来

4.1 Streaming data

Streaming data可以实现流数据的传输。举个例子,如果后台传递了一个很大的数据到前台,正常情况下前台需要接受完这个数据才能进行展示,而流数据可以一边接受一边展示,不需要等到整个数据都接受完再展示。

4.2 Web Bluetooth

Web Bluetooth可以在浏览器中连接蓝牙设备并通过PWA与设备交互。例如,开发人员已经开发出可以与心率监视器交互的网络健身应用程序和可以驾驶微型无人机的网络应用程序。

4.3 The Web Share API

The Web Share API允许您轻松触发原生Android共享对话框,通过URL或文本进行共享。这是一个重要的API,因为它为终端用户提供了对数据共享方式和位置的控制。

4.4 Payment Request API

Web Payments是W3C正在开发的一种新兴网络标准,旨在简化在线支付,并使更多的参与者能够轻松参与网络上的支付生态系统。标准灵活; 它们适用于各种类型的支付系统,适用于任何设备,支付方式或支付服务提供商的任何浏览器。这种灵活性使开发简单性,部署一致性以及与新兴支付技术的未来兼容性。

4.5 Hardware: the Shape Detection API

Shape Detection API允许开发人员访问人脸检测等功能,条形码检测,甚至是文本检测。


结语

看完这本书,特别是PWA未来发展这一块的内容,深深的感觉到web日新月异的发展以及逐渐强大的功能API,期待各种新功能的完善,期待可以在项目中用起来!开心到飞起,越来越坚信转行前端的决定是正确的:)

转载于:https://juejin.im/post/5c9d91c35188251e592be8b7

《PWA实战:面向下一代的Progressive Web APP》读书笔记相关推荐

  1. 读书笔记 | 墨菲定律

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  2. 读书笔记 | 墨菲定律(一)

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  3. 洛克菲勒的38封信pdf下载_《洛克菲勒写给孩子的38封信》读书笔记

    <洛克菲勒写给孩子的38封信>读书笔记 洛克菲勒写给孩子的38封信 第1封信:起点不决定终点 人人生而平等,但这种平等是权利与法律意义上的平等,与经济和文化优势无关 第2封信:运气靠策划 ...

  4. 股神大家了解多少?深度剖析股神巴菲特

    股神巴菲特是金融界里的传奇,大家是否都对股神巴菲特感兴趣呢?大家对股神了解多少?小编最近在QR社区发现了<阿尔法狗与巴菲特>,里面记载了许多股神巴菲特的人生经历,今天小编简单说一说关于股神 ...

  5. 2014巴菲特股东大会及巴菲特创业分享

     沃伦·巴菲特,这位传奇人物.在美国,巴菲特被称为"先知".在中国,他更多的被喻为"股神",巴菲特在11岁时第一次购买股票以来,白手起家缔造了一个千亿规模的 ...

  6. 《成为沃伦·巴菲特》笔记与感想

    本文首发于微信公众帐号: 一界码农(The_hard_the_luckier) 无需授权即可转载: 甚至无需保留以上版权声明-- 沃伦·巴菲特传记的纪录片 http://www.bilibili.co ...

  7. 读书笔记002:托尼.巴赞之快速阅读

    读书笔记002:托尼.巴赞之快速阅读 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<快速阅读>之后,我们就可以可以快速提高阅读速度,保持并改善理解嗯嗯管理,通过增进了解眼睛和大脑功能 ...

  8. 读书笔记001:托尼.巴赞之开动大脑

    读书笔记001:托尼.巴赞之开动大脑 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<开动大脑>之后,我们就可以对我们的大脑有更多的了解:大脑可以进行比我们预期多得多的工作:我们可以最 ...

  9. 读书笔记003:托尼.巴赞之思维导图

    读书笔记003:托尼.巴赞之思维导图 托尼.巴赞的<思维导图>一书,详细的介绍了思维发展的新概念--放射性思维:如何利用思维导图实施你的放射性思维,实现你的创造性思维,从而给出一种深刻的智 ...

  10. 产品读书《滚雪球:巴菲特和他的财富人生》

    作者简介 艾丽斯.施罗德,曾经担任世界知名投行摩根士丹利的董事总经理,因为撰写研究报告与巴菲特相识.业务上的往来使得施罗德有更多的机会与巴菲特亲密接触,她不仅是巴菲特别的忘年交,她也是第一个向巴菲特建 ...

最新文章

  1. 清华大佬手把手教你使用Python进行数据分析和可视化
  2. Log4Net五步走
  3. 为什么类的下行转换是不安全的_类型转换
  4. 面试必问:Spring循环依赖的三种方式
  5. armv8/arnv9的aarch64架构中系统寄存器的分类和总结
  6. 【笔记】css卡片式地展示人物信息和一些展示信息的相关美化记录
  7. java 反射机制_详解Java中的反射机制的优缺点
  8. java 多态 降低耦合_java多态
  9. 2020地区mysql表_2020年甘肃省军队文职考试职位表下载:张掖地区招13人
  10. 五、Web服务器——MVC开发模式 EL表达式 JSTL 学习笔记
  11. 闭包 装饰器 偏函数
  12. 常用的五种大数据分析方法
  13. 单元测试 代码里面都绝对路径怎么处理_python基础之包,异常处理
  14. rgba通道转rgb_JS实现颜色的10进制转化成rgba格式的方法
  15. linux如何解除密码锁屏图案大全,忘记锁屏图案密码的六种解决办法
  16. Alt + 数字键 符号大全
  17. 管理信息系统(MIS)权威期刊列表
  18. 在线支付功能实现代码
  19. 只会写代码的程序员不是好程序员
  20. 从Docker镜像构建演化史来了解多阶段构建的影响

热门文章

  1. php文件上传并保存路径到数据库,thinkphp表单上传文件并将文件路径保存到数据库中?...
  2. html5 web storage攻击,HTML5安全风险详析之二:Web Storage攻击
  3. linux下的安装命令行工具下载,linux系统程序安装(二)yum工具2-yum源及包下载
  4. 怎样测量地图上曲线的长度_测量长度的特殊方法
  5. 把网卡指定给vm虚拟机_为VMWare虚拟网卡指定静态的MAC地址
  6. 学姐百度实习面经(轻松拿offer)
  7. (四)深入浅出TCPIP之TCP三次握手和四次挥手(下)的抓包分析
  8. PCB设计的基本步骤
  9. python顺序结构实验报告_Python 数据结构 之 串 的顺序存储结构
  10. OpenCL 与 CUDA