PWA 是最近一个热门话题,很多开发同学都在尝试落地,其中也有些还在犹豫。这篇文章主要阐述对几个问题的看法,供大家参考。
- 简而言之(TL;DR):
- . PWA落地最大的纠结在于iOS支持的问题,且短时间难以得到改善。如果你的业务仅限于iOS,就不用再往下看了。
- . 事实上,PWA本身与其它技术方案并不冲突,比如各类的web性能优化方案,以及基本的H5技术仍然可以落地共存,PWA只是在其之上进行更进一步。这正是其所谓渐进式命名的由来。
- . PWA正在拥有一个完善的技术体系,涉及五个层次,从Web平台,到各类工具。
- . 无论是从最近Web生态的发展,到未来应用开发技术的演进,再到实际开发落地和维护,PWA都代表了一个正确方向,值得投入。
iOS 中 Safari 内核支持一直是 PWA 绕不开的问题。2016 年参加 Google I/O 时,与 Chrome 团队做了一次交流。他们明确表达了期望 UC 参与 Chromium 社区,越多人使用 Chromium 内核,Safari 承受的压力就越大,就能促使其快速跟进 Chrome 提出的一系列新标准,其中的重点就是 PWA 方向。Safari 团队虽然将 Service Worker 列入其五年计划,但并没松口开工。反观 Microsoft Edge 要积极的多。曾经打破浏览器格局的 WebKit(Safari) 已显然要成为移动时代的 IE6 了,主要着眼于其封闭的生态思考!
但是,iOS 支持的问题不应该阻碍了 PWA 技术选型!原因是 PWA 是渐近增强式 (Progressive) 的技术,其核心是增强,而不是直接替代(比如没有替换某个 H5 特性,而是新增。),在不支持的场景下可以安全降级。以离线存储为例,AppCache 实在太难用, 在没有支持 Cache API 的情况下可以使用 Local Storage 实现,如果支持了 Cache API,就可以直接使用 ServiceWorker+Cache 来实现。在技术方案上,有一个基本的实现方案,是通用的。
在支持 PWA 相关标准的环境下,还可以进一步使用加强的技术方案。正如软件开发没有银弹一样,不能期望一个新技术可以解决所有问题。之前要解决的问题还是要继续分析解决,比如 JS 逻辑优化、图片压缩、CDN 配置优化之类的工作,还是应当要一样展开的。
如果一定要使用到 PWA 带来的好处。可以考虑:
初次进行 PWA 落地,我们往往会聚焦于几个抢眼的特性。从小步快走的角度来看这是正确的,但不能仅限于这一点,我们还需要更加系统了解 PWA 的技术体系。
从整个技术体系上看,分成五个层次:
Features 不用多说,Web Platforms 则是除了 Safari 之外的主流浏览器都有支持,只是 Edge 在支持的范围上有所差异。以下是工具和组件的构成:
最后特别需要提醒的是,落地过程也是一个持续学习和优化的过程。比如 Polymer 本身有一些性能优化策略,如果简单的使用可能会发现有性能上的降级,UC 的同学也是在实践中积累了些经验。
PWA 这个体系涉及的功能很多,也是逐渐在完善。Chrome 本身迭代比较快,国内浏览器有一个较长的跟进周期。所以特性支持不全是比较容易遇到的问题。举个例子,饿了么团队在 PWA 实践中遇到了 Fetch Redirect 失败的问题,详情可以参考:。从页端或者后台还是比较容易处理的。
但是不是所有的问题都能这样解决,也会有必须内核进行支持的问题,这种情况下,浏览器是可以做部分升级的。如果你遇到了,欢迎随时和我们联系。
仅列几个给有需要的同学参考:
PWA 首先瞄准的是应用开发,以其官方定义,是为应用开发者提供多一个选择。所以会尽力缩小其与原生应用在能力上的差距。回头想到 2012 年前后那股也是 Chrome 推动的 WebApp,最终不了了之。现在的 PWA 机会其实也就是 H5 的未来空间。
可以想象未来 5 年,应用开发的技术模式一定会有很大的变化。总体方向就是高动态性、低开发成本(包括了低风险), 产品形式上超级应用 (包括 OS) 和轻快的小型应用两极分化,前者越来越寡头,后者则占据绝大多数。
纵观现在 App 开发技术上的创新都是在这个方向上,包括 RN, Weex, AMP(或者 Instant Article), PWA, Android Instant App 之类。无论 Native 容器、或者原生应用本身如何发展,产品对动态性的需求只会越来越高。而产品技术的复杂度也会越来越高,开发周期、变更成本、维护成本都有越来越高的要求。
Web 的优势是开放的标准,一是持续改进,不断扩展和丰富,使其展现能力越来越强。二是技术清晰透明,易于理解和传播,有助于降低开发成本,包括风险。着眼于未来,不在于现在谁的市场占比提升速度,而在于哪方能更稳健地持续提供系统的支持,让生态更完整。
具体到内容展现,或者渲染技术上。虽然 Web 目前仍然有较大的性能问题,但它正通过自身的优化、以及提供原生扩展不断缩小差距。以 UC 实践的经验来看,除了内核演进外,前端对渲染性能的理解和优化也是同样关键的问题。可以参考 Roger 的。
再回到 2016 年底到现在 3 月份,Node.js 的成熟推广,Weex/RN 发力,再到小程序造的势 (轻快),让页端承担应用 + H5 主力开发的模式越来越清晰。
再从 Google 对 Web 开发者的推崇 (16 年底的开发者大会) 以及对业界的技术推广活动,到 iOS AppStore 的热修复门,一边推,一边收紧,所产生的不确定性反而让 H5 方向更为明确。
来源: http://www.bubuko.com/infodetail-2000578.html