pwa

473 阅读8分钟

blog.csdn.net/fuhanghang/…

  1. 概念

PWA 是 Google 于 2016 年提出的概念,于 2017 年正式落地,于 2018 年迎来重大突破,全球顶级的浏览器厂商,Google、Microsoft、Apple 已经全数宣布支持 PWA 技术。

PWA 全称为 Progressive Web App,中文译为渐进式 Web APP,其目的是通过各种 Web 技术实现与原生 App 相近的用户体验(用户体验逐渐接近原生App)。

纵观现有 Web 应用与原生应用的对比差距,如离线缓存、沉浸式体验等等,可以通过已经实现的 Web 技术去弥补这些差距,最终达到与原生应用相近的用户体验效果。

  1. 特性

安全可靠

使用 Service Work 技术实现即时下载,当用户打开应用后,页面资源的加载不再完全依赖于网络,而是使用 Service Work 缓存离线包存在本地,确保为用户提供即时可靠的体验。

访问更快

首屏可以部署在服务端,节省网页请求时间,加载速度更快,拥有更平滑的动态效果和快速的页面响应。

响应式界面

支持各种类型的终端和屏幕。

沉浸式体验

在支持 PWA 的浏览器和手机应用上可以直接将 Web 应用添加到用户的主屏幕上,无需从应用商店下载安装。从主屏幕上打开应用之后,提供沉浸式的全屏幕体验。

  1. 功能

手机应用配置(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 真正流行起来之后,相信这个问题就不会存在了。

  1. 发展

谷歌

基于 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 应用。

www.zhihu.com/question/34…

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 部署成为可能。