- 概念
PWA 是 Google 于 2016 年提出的概念,于 2017 年正式落地,于 2018 年迎来重大突破,全球顶级的浏览器厂商,Google、Microsoft、Apple 已经全数宣布支持 PWA 技术。
PWA 全称为 Progressive Web App,中文译为渐进式 Web APP,其目的是通过各种 Web 技术实现与原生 App 相近的用户体验(用户体验逐渐接近原生App)。
纵观现有 Web 应用与原生应用的对比差距,如离线缓存、沉浸式体验等等,可以通过已经实现的 Web 技术去弥补这些差距,最终达到与原生应用相近的用户体验效果。
- 特性
安全可靠
使用 Service Work 技术实现即时下载,当用户打开应用后,页面资源的加载不再完全依赖于网络,而是使用 Service Work 缓存离线包存在本地,确保为用户提供即时可靠的体验。
访问更快
首屏可以部署在服务端,节省网页请求时间,加载速度更快,拥有更平滑的动态效果和快速的页面响应。
响应式界面
支持各种类型的终端和屏幕。
沉浸式体验
在支持 PWA 的浏览器和手机应用上可以直接将 Web 应用添加到用户的主屏幕上,无需从应用商店下载安装。从主屏幕上打开应用之后,提供沉浸式的全屏幕体验。
- 功能
手机应用配置(Web App Manifest)
可以通过 manifest.json 文件配置,使得可以直接添加到手机的桌面上。
离线加载与缓存(Service Worker+Cache API )
可以通过 Service Worker + HTTPS +Cache Api + indexedDB 等一系列 Web 技术实现离线加载和缓存。
消息推动与通知(Push&Notification )
实现实时的消息推送与通知
数据及时更新(Background Sync )
后台同步,数据及时更新
4. 优势与劣势
优势:
- 超简单的安装和下载。
发布迭代不需要第三方平台审核。
我们都知道发布一个苹果应用是需要提交 App Store 商店进行审核,通过了方可发布成功的。安卓应用也是一样。并且更新迭代版本的时候也需要审核,还需要提交一些功能说明,图片等资料。但是网页版的应用就完全不需要这个审核过程,直接部署服务器就可以使用。
渐进式
现有的 Web 项目可以通过 PWA 的几个核心技术点一步步转型成一个完整的 PWA 应用。
劣势:
因为推出的时间不长,所以现有浏览器的支持还不够全面, 不是每一款浏览器都能100%的支持所有的 PWA 特性。
对于底层硬件的调用还是需要依赖第三方库才能实现(如打开摄像头,实现语言功能等等)。
PWA 现在还没那么火,国内一些手机生产商在 Android 系统上做了手脚,似乎屏蔽了 PWA, 但是等 PWA 真正流行起来之后,相信这个问题就不会存在了。
- 发展
谷歌
基于 Chromium 开发的浏览器 Chrome 和 Opera 已经完全支持 PWA 。
这里说一下 Chromium 和 Chrome 的区别。
Chromium 是谷歌的开源项目,由开源社区去维护。拥有众多的版本包括Windows、Mac、Linux。国内所有的 “双核浏览器”,都是基于 Chromium 开发的,而我们下载的 Chromium 浏览器是其源码未经修改的直接编译版本。
Chrome 是基于 Chromium 开发的,是闭源的,跨平台多端支持,特性更加丰富。
Google上线了两个新网站,web.dev 和 squoosh.app 都支持 PWA( web.dev 是宣传和推广 PWA 的,解释了 PWA 的几个关键技术。squoosh.app 是一个图片压缩工具) 。
微软
微软将 PWA 带到了 Windows 10。同时 Windows Edge(windows 10 之后微软推出的浏览器,比 IE更流畅、外观 UI 更舒适) 也支持 PWA。
IOS
随着 iOS 11.3 的发布,iOS 正式开始支持 PWA,可以将它放在苹果手机主屏。
Android
Twitter 和 Flipboard 都推出了 PWA,可以将它放在安卓手机主屏。
国内
国内支持 PWA 的应用有微博、淘宝、豆瓣和饿了么。
随着越来越多的浏览器大厂对 PWA 做出了支持和优化,PWA 的时代已经不远了。
随着时代的发展,出于对低成本开发与维护复杂跨平台应用的追求,前端技术正在突破浏览器束缚,开始向桌面、移动等领域扩张。其中出现了以 Electron、Cordova、ReactNative、Weex 为代表的混合应用开发架构方案,这些方案虽然解决了传统 Web 无法与底层系统深层次交互、原生应用更新繁琐、应用开发维护成本过高等问题,但其依旧无法满足用户零安装、零更新、用完即走的需求。
当我们回顾技术发展史会发现,目前唯一能够打破平台限制、满足零安装更新等需求的正是不经任何加工的传统 Web 技术,得益于前端工程化体系的逐步完善,构建大型 Web 应用的开发维护成本已经得到大幅度降低,但由于 Web 自身的一些原因导致它无法替代平台原生应用:
- 应用入口依赖于浏览器。
- 不具备离线处理能力。
- 不具备与底层系统深层次交互能力。
也正因为此,Google 的工程师于 2015 年提出了 PWA(Progressive Web App) 架构,它旨在不丢失 Web 开放特性的前提下,让 Web 应用能够以渐进的形式撕掉浏览器的标签,最终抹平与原生应用的差异。其主要特点有:
- 可通过 Manifest 配置文件实现将应用添加到主屏幕,以解决应用入口依赖浏览器的问题。
- 借助 Service Worker、离线存储、后台同步等技术来提供离线处理能力。
- 通过推送通知、蓝牙、支付等新接口来突破浏览器限制,从而达到集成底层系统功能。
为了能够让大家更好地理解并掌握 PWA,我将个人在工作学习中的一些心得整理成小册《深入浅出 PWA》,希望通过学习,大家可以熟练掌握并使用 PWA 架构及其相关技术来构建高可用的现代化 Web 应用。
Web Components 代表了“组件化”开发模式首次得到了 Web 第一方标准支持。在最简略的情况下,从此以后 Web 有了不依赖任何第三方方案开发可封装组件的能力,而这是大规模多人项目的工程化前提。举例来说,以前需要依赖 Angular/React 的东西,比如“组件封装”和“视图数据绑定”,以后可以用 Custom Elements 和 Template Instantiation 来完成。再配合 HTTP/2 等协议层优化,复杂的大型前端项目有了可以不经过任何编译直接执行的可能。
PWA 则代表了 Web 平台从浏览器向操作系统内核的扩展,更代表了自应用商店以来可能的下一次软件分发模式革命。Web 平台标准已经逐渐实现越来越多操作系统级别的 API —— 例如 Native File System 和 Web Crypto API,而 PWA 能够使复杂的 Web 应用以接近原生 app 的方式被执行,并且以更自由的方式被分发(URL)。长久以来 Web 和操作系统原生程序(Win32,iOS app,Android app)之间总是有不可跨越的差距,PWA 的诞生使这个差距变得模糊。
就像我在别的答案里提到的,我认为未来的 Web App 形态应该是这样的:
- Web Components 提供了前端工程化的第一方支持,使得今天由三大框架提供的实现会逐渐被第一方实现替代(比如 Template Instantiation),当然这不代表前端框架会消亡,只是它们会逐渐变化;
- Web Assembly 提供了前端开发“摆脱 JavaScript”的能力,随着它与今天 JavaScript API 的连接加深,或是相互通讯方案的更加成熟,数十种今天成熟的强类型语言会进入前端开发领域,而 JS 会退化为数十个选项之一;
- 随着新硬件功能的逐渐诞生/成熟,Web API 会持续发展。就像过去的 Gesture API、Geolocation API 一样,未来我们会获得 VR API、Native File System API,Web Authentication API 等等等等。越来越多今天第三方的方案会被集成进第一方标准,使 Web 平台不断向操作系统核心进发。
- PWA 会赋予 Web 平台全新的分发模式,并且逐渐开始绕过应用商店。随着 Web 平台能力的极限不断扩展以及硬件能力的持续进步,越来越多的软件会逐渐被搬运到 Web 上 —— 别忘了 Web 是天然跨平台的,5G 的大规模应用也使更大体积的软件通过 Web 部署成为可能。