为什么说“渐进Web应用 vs. 原生应用” 是个错误的话题

原文出处 Why “Progressive Web Apps vs. native” is the wrong question to ask

Updated December 2017

尽管 PWAs(Progressive-Web-Apps,渐进Web应用)问世已经两年多了, 但人们对它仍存在一些误解,比如:它们只能在Chrome中运行,不像原生应用那样流畅,没有全屏模式,它必须是SPA(单页应用),建立离线优先是不值得的,等等。

这些说法都不对,并且我希望媒体允许使用删除线文本,来强调我的要点。

PWAs是一个十分成熟的技术,像Twitter和AliBaba这样的大玩家已经取得了巨大的成功。

此外,PWAs实际上提供了比我们想象的要多的硬件访问能力。这里有一个关于截止到2016年9月(Chrome在此时间增加了蓝牙支持)“如今我们能做什么”(他本身是个PWAs,快试试看吧)的截图,来自我的Android版Chrome 52稳定版。

硬件访问包括:

即将支持访问的硬件

这些功能正在被支持或已经可以在一些浏览器中使用:

这是在Firefox 48中:

另一个需要注意的重点是原始测试 框架 (已在Chrome中实现), 使制造商能够公开和测试硬件(或软件)功能,而无需通过标准化过程。例如,手机制造商可能会暴露一个API来读取压力传感器的值,然后将其提交给W3C。

无论如何,访问硬件功能只是一个伟大的应用程序的一部分。 这里还有一些现在可以用于web应用的原生app的功能。

PWAs也可以使用的传统原生功能

这些功能涵盖了很多用例,现在许多流行的本地应用程序可以重写为PWA。以Slack为例。它的代表性开源项目 Rocket.Chat, 正在构建一个PWA版本. 有关更多PWA演示,请参阅 https://pwa.rocks.

虽然PWA功能正在迅速发展,但有一些事情你还做不到。

PWAs正在支持的原生功能

PWA目前缺乏的 Android 原生功能

  • 联系人,日历和浏览器书签的访问权限(尽管缺乏对这些内容的访问权限可能会被有隐私意识的用户视为 feature

  • 警告

  • 电话功能 - 包括拦截短信或电话,发送短信/彩信,获取用户的电话号码,阅读语音信箱,拨打电话时不需要拨号对话框

  • 低级的访问一些硬件功能和传感器:手电筒,大气压力传感器

  • 系统访问:任务管理,修改系统设置,日志

  • 注册然后处理自定义URL方案和协议或文件类型

对于大多数需求,PWAs都可以胜任而且还有一个最大的好处:您不必为Android,iOS和Web开发和维护三个独立的代码库。 PWA还具有原生应用缺乏的某些功能。

PWAs优于原生应用的地方

来源: https://youtu.be/qmE_jpnYXFo?t=96

  • 可发现性 — PWAs中的内容可以很容易地被搜索引擎找到,但是像StackOverflow这样以内容为核心的原生应用没法在应用商店的搜索结果中显示它提供访问的内容,例如“pwa vs. native”。这对像Reddit这样的社区来说是一个问题,它不能将他们众多的子社区作为单独的“应用”展示给应用商店。

  • 可链接性 — 任何页面/屏幕都可以有一个对应的链接,可以轻松共享

  • 可收藏性 — 可保存该链接对应的app页面

  • 总是最新的 — 无需通过应用商店审批流程来推送更新

  • 通用访问 — 不受应用商店的限制, 有时甚至是任意策略 或 (意想不到的)地理限制

  • 节省大量的数据, 在互联网接入昂贵 和(或) 缓慢的新兴市场中非常重要。 例如,电子商务网站Konga 通过迁移到PWA,将第一次加载的数据使用率降低了92%

应用程序商店中的PWAs

在2017年10月的Chrome Developer峰会上,Google发布了 Trusted Web Activities — 一种将你的PWA与你的Android应用程序集成的新方法。通过这种方式你可以在Google Play商店中发布一个Android app壳来加载你的PWA,以便用户通过Google Play也能发现它。

iOS

虽然Opera与Chrome和Firefox大致相同,但在iOS上我们仍然在等待Safari赶上来。幸运的是, 苹果确实关注PWAs, 并且正在 考虑支持Service Worker, 这是为PWA提供支持的核心功能。 然而,即使没有Service Worker,PWAs仍然会提供上面列出的所有其他功能,除了离线运行和Safari / iOS推送通知(Mac OS Safari推送通知功能)。用户仍然可以 将你的应用程序添加到他们的iOS主屏幕并全屏启动.

总结

“PWA vs. Native”是一个错误的问题,因为如果你已经有了一个产品,你已经有了一个应用程序,一个网站,或者两者兼而有之,你应该改善这两者。 如果你没有产品,那么如果您有足够的资源来构建原生的Android +原生iOS +网络应用程序并保持同步,那就去做吧。否则,在大多数情况下,首先选择构建PWA是不容易的:

在过去,你必须开发

桌面/移动网页+原生Android +原生iOS

你现在可以in most cases,只开发

PWA + iOS app

并且 Safari支持Service Worker, 那你只需要开发

PWA

这不是“PWA vs. native”,而是“PWA vs. [web + native + native]”。

就覆盖面而言, 没有原生解决方案能够击败PWAs

[This article was re-posted here from StackOverflow, given the danger of hosting valuable content there]

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.

1K17* BlockedUnblockFollowFollowing

Go to the profile of Dan Dascalescu

Dan Dascalescu

Dev. Relations @ Google. Founded the startup ship for entrepreneurs @BlueseedProject and the @QSforum. ♥ emergent tech, healthspan extension, improv, acro yoga