既想像 PC 时代使用 Web 一样体验超流畅,又希望它能承载任何服务还让你感觉不到卡顿和延迟,这样的要求在移动互联网时代实现起来真的很难。在小米 MIUI 系统框架负责人董红光看来,这一判断完全有足够的依据。
在他看来,目前移动端的应用服务分发基本上是两个承载形态,分别是 APP 和 Web。PC 时代绝大部分服务都是浏览器承载,在浏览器中打开搜索引擎、从搜索引擎中搜索关键字、然后跳到服务页面,这个过程中间可能还会链接到第三个服务,但是无论如何跳转,整个过程是非常流畅的,中间没有任何断档,不需要安装软件、也不需要跳出。
但是这样的体验放到移动端就不那么容易实现了。首先,移动端所承载的服务远比 PC 端要复杂得多,比如拍照、定位、蓝牙、传感器,这些功能在网页端没有相应的 API 可供调用,让网页去承载移动端的这些服务,服务势必不完整;
另外一个问题就是卡顿的问题了,移动端 CPU 性能要比 PC 端差,这就会导致计算能力不足,外加移动端有很多复杂的应用、前端写法又过于灵活,加之浏览器背负的历史包袱,导致移动端的 Web 应用很容易造成卡顿、慢、占内存等情况。以既有 APP 又有 H5 的很多应用为例,绝大多数情况下 H5 远远达不到 APP 的体验。
此外还有一个问题,就是网页端没法做留存。今天某个用户看到一个好的服务、或者一个好的网页,如果是 APP 的话很轻松可以把应用保存到桌面图标,但是网页却没有这个技术能力可以实现此功能。
当然或许很多人会说那就用 APP 啦,董红光认为 APP 也有很多问题:想想我们每一个人手机上真正下载、安装的 APP 能有多少?你会轻易下载一个动辄几十兆甚至上百兆的 APP 吗?这几十兆甚至上百兆的 APP 没法像网页一样实现一次性分发,要想使用一个 APP,必须先把这个 APP 完整下载下来。
另外很关键的问题在于, APP 之间很难做跳转,A 应用跳到 B 应用,一般是打开 B 应用的 H5 页面,应用之间的割裂很严重,无法给用户带来顺畅体验;而孤岛问题的另外一个呈现形式,在于无法进行索引服务,在应用间进行搜索目前基本上是无法实现的事情。
针对以上问题或部分问题,其实多家公司推出了解决方案,比如 Google 的 PWA、Facebook 的 React Native、腾讯的微信小程序,还包括阿里的蚂蚁应用、百度的轻应用,而小米也推出了直达服务。
小米直达服务开发示意图
对于小米直达服务的推出,在小米开发者生态业务负责人李晓璐看来,这是顺应技术趋势所在的必然而为之:PC 时代的应用是软件 + 网页形式;移动互联网上半场是原生应用 +Web 应用形式;移动互联网下半场急需解决原生应用以及 Web 应用的各自短板问题——因此混合框架应运而生。对此小米给其直达服务的定义是:秒开及内容直达。
对此小米比较有信心的地方在于,小米直达服务的核心在于它是一个操作系统,操作系统仍是用户使用手机的第一入口,在入口层贴近用户,用户的体验才会最好。李晓璐透露了一个数据:小米手机上 95% 的应用下载来自小米的应用商店。这说明小米的应用分发已经是绝大部分用户使用小米手机时的习惯。如果说应用商店的下一代有新的服务分发形态,那么操作系统仍然有很大优势去做新的生态的探索和新的生态的培养。
对此董红光也进行了补充:小米希望真正做到类似于当前 PC 浏览器的顺畅体验。具体到直达服务技术本身,就不得不提原生渲染技术了。直达服务实际上是运行在一个由直达服务的核心引擎管理的安卓进程上,使用安卓原生渲染,所以从开放能力、性能、内存、权限控制和管理方面的设计理念等同于原生应用。
除了原生渲染引擎之外,小米直达服务也支持在没有原生渲染条件之下,直接渲染到浏览器。在此基础之上,小米提供了封装的大量常用组件,也提供了很多高级语义标签,相当于原生封装,不需要开发者自己单独开发——Native 版本一份、 Web 版本一份。
此外,小米直达服务还提供了一个桥接模式,把很多 API 暴露给前端,在此基础上提供了蓝牙、传感器等系统功能;另外还暴露了很多服务能力,比如账号、推送、支付等等。在此基础之上,提供一套 JS 开发框架,除标签、接口能力逐渐暴露以外,还提供 APP 开发需要的页面生命周期管理、页面之间路由跳转等功能。整个核心写法是模板 + 数据绑定的写法,也是目前前端比较流行的一种写法,所谓的 MVVM 模式,这套框架相当于提供了 MVVM 框架的实现。这一整套东西就是运行时环境,运行时环境之外,因为要支持多个应用一起跑,要有沙盒的管理,保证应用之间数据、运行层面的安全。
小米直达服务运行时架构图