2015年,谷歌推出了一种为 Android 开发网络应用程序的新方法: 先进的网络应用程序。人们可以创建一个看起来像本地应用程序的应用程序,可以使用设备的硬件,如照相机和加速计,接收推送通知,有一个启动器图标,离线工作,存储本地数据,等等。
在 Android 上,本地应用程序提供了哪些进步网络应用程序不支持的功能,反之亦然。
本地应用程序的主要优势在于,它们可以访问平台可以提供的所有本地 API (联系人、照相机闪光灯、短信、电话、网络、蓝牙、传感器、原始套接字... ...) ,而进步的 Web 应用程序(目前)还不能访问,因为它们受到标准 Web 功能的限制。
渐进式 Web 应用程序的目标是扩展这些功能,以涵盖最关键的情况。在这种情况下,看看 渐进式 Web 应用程序: 在不放松灵魂的情况下逃避标签,你可以找到一个进步的 Web 应用程序应该提供什么样的列表:
响应性: 适合任何形式的因素 独立于连接性: 逐步增强服务工作者,让他们离线工作 类应用程序交互: 采用 Shell + Content 应用程序模型来创建 appy 导航和交互 新鲜: 由于 ServiceWorker 更新过程,显然总是最新的 安全: 通过 TLS (服务员的要求)提供服务,以防止窥探 可发现: 是可识别为“应用程序”感谢 W3C 清单和服务工作者注册范围允许搜索引擎找到他们 可重新启用: 可以访问操作系统的重新启用 UI; 例如,推送通知 可安装: 通过浏览器提供的提示到主屏幕,允许用户“保留”他们认为最有用的应用程序,而不用担心应用程序商店的麻烦 可链接: 意味着它们是零摩擦、零安装、易于共享的。 URL 的社会力量很重要。
从这些方面来看,可联系的是本地应用程序以 移动深度连接移动深度连接的形式从 Open Web 导入的第一批特性之一。
但是值得特别提及的是 新鲜的 + 可安装组合,因为它代表了 Web 作为一个平台相对于 本地人替代品的主要优势之一。这里的 可安装表示它出现在你的主屏幕上。这并不意味着您需要通过下载和安装阶段。在浏览时打开一个 URL 或发现一个服务,就完成了: 它会出现在你的主屏幕上。
Fresh 指的是一个常规网站的工作方式,提供即时加载和无缝更新。你不需要从 YouTube 的网站上安装更新,它已经部署好了,你下次访问它的时候就可以使用它了。
我不是在讨论剩下几点的好处,因为你要求的差异,例如,重新参与是本地应用程序已经通过推送服务和通知,现在网络应用程序已经赶上来了。
其他相关的关键问题是哪个平台更适合您的需要。如果你不访问特殊的硬件能力,网络应该足够,选择网络你是免费的市场,专有的生态系统,顺便说一下,你可以确保一定的普及度和 互操作性。
最后,我建议您使用 Chrome 浏览手机上的 Www.flipkart.com。非常棒: 没有 bug,导航流畅,有应用程序的感觉。下线后,它将继续工作。这是一个真实世界的例子。将应用程序添加到主屏幕,下次打开它,体验甚至更好。
您可以看看 火狐操作系统以及将 more platform APIs引入标准 Web 的示例(或多或少成功)。
截至2017年2月,渐进式 Web 应用程序是一个足够强大的平台,Twitter 已经将他们所有的移动网络流量转移到了一个 React PWA。
截至2016年8月,渐进式 Web 应用程序实际上提供了比通常想象的更多的硬件访问。下面是我的安卓版 Chrome 52的 今天怎么了截图:
这些特性已经在一些浏览器中实现或者已经可以工作了:
另一个需要注意的重点是,Origin Trials框架(在浏览器中实现)使制造商能够公开和测试硬件(或软件)功能,而不必经过标准化过程。例如,手机制造商可以公开一个用于读取压力传感器值的 API,对其进行细化,然后将其提交给 W3C 考虑。
除了硬件访问,还有一些传统上由本地应用程序使用的软件特性,现在可以在网络应用程序中使用。
硬件加速的2D/3D 图形通过 HTML5画布或 WebGL-检查一些 HTML5 Canvas 演示,WebGL 网站或 三 JS 图书馆。2014年的一个 统一跨平台游戏引擎基准测试比较了本机和 WebGL 渲染性能,以及 结束
“最重要的一点是,尽管在某些领域 WebGL 仍然明显慢于本地代码,但总体而言,你已经可以期待获得非常好的性能,而且这只会在未来变得更好。”
差距确实在缩小。
这些特性涵盖了很多用例,现在很多流行的本地应用程序都可以重写为 PWA。以 Slack 为例。它的开源替代品 Rocket.Chat, is building a PWA version。有关更多 PWA 演示,请参见 https://pwa.rocks。
最后注意: 在台式机和大多数移动设备上运行的 PWA 具有相同的代码基础。在台式机环境(ChromeOS、 回见 Mac 和 Windows)中,它们和其他应用程序一样被启动,并在常规应用程序窗口中运行(没有浏览器标签)。