Ash's Thinking

快应用和小程序

2016 年 9 月微信小程序开始内测,2017 年 1 月微信小程序正式发布,一经面世就掀起了国内移动开发的浪潮。2018 年 3 月,九大第三方 Android 手机厂商也在北京联合推出了「快应用」标准。

互联网时代下的移动端软件

1995 年之前的程序员都在使用 C、C++、Pascal 这些面向过程、半面向对象语言,他们编程时需要花费大量的精力去做很多重复性劳动,而且一旦项目架构复杂起来,面向过程的弊端都会显现:架构耦合严重。

1995 年 5 月,Java 面向对象编程语言诞生了,Java 语言在设计上就去其糟粕取其精华,吸收了 C++ 语言的各种优点,摒弃了 C/C++ 里不利于理解的多继承、指针等概念。在随后十多年来,智能手机兴起,手机应用的开发语言基本都是那个强大易用的 Java。

2007 年 1 月,iOS 带着它超前的设计面世,从此世界上只剩下两大手机系统阵营竞争:Android、iOS。

而在 2015 年往后的日子里,开发者们意识到如果用 JavaScript 来开发应用,这样前端的技术栈都能够统一,还能节约开发成本,由 React Native 引领的跨平台框架逐渐浮现。随着 4G 的普及、短视频、快节奏的生活,安装应用这个动作变得极为昂贵,智能手机的生态好像陷入了一个怪圈,既要让开发者开发新的应用来维持生态运转,但用户又不肯去安装应用,50% 的用户平均一个月安装的新应用还不到一个。

微信小程序打破泥潭

「我就只用个 XX 功能,为什么还要下载安装整个应用?」

在微信小程序面世之前,人们都会碰到这个问题,而没有解决这个问题的办法。在微信小程序面世之后,这些问题都迎刃而解。

2016 年 9 月微信小程序开始内测,2017 年 1 月微信小程序正式发布,一经面世就掀起了国内移动开发的浪潮,诸多企业开始支持微信小程序、诸多学校开始开设微信小程序课程,同年微信小程序直接带动就业 104 万人,社会效应不断攀升。腾讯用它 10 亿活跃用户的微信作为平台,开启了自己的生态圈。从此查询、打车、订票、外卖这些单一功能不再需要下载安装对应的应用,而是在微信里搜索出来后即可打开,体现了“用完即走”的理念。移动手机用户的使用体验直线上升,进而刺激了消费。

微信小程序,使用 JavaScript 编程语言、自定义类 Vue 语法、HTML 与 CSS 这些前端网页老技术,搭配 V8 渲染引擎,完成了平台统一的壮举,当然也仅仅局限于微信上。随后支付宝、百度等互联网企业也开始利用自家应用的用户数优势,开始推出自家的小程序来试图抢占市场份额。

快应用与微信小程序的博弈

2018 年 3 月九大手机厂商(华为、小米、OPPO、vivo、中兴、金立、联想、魅族、努比亚)联合在北京推出了「快应用」标准。随后快应用服务框架开始集成进各手机厂商的手机系统中,可以在操作系统层面实现用户需求与应用服务间的无缝连接,提升用户的使用体验和应用服务的转化效率,同时支持生成桌面图标等留存能力。

快应用也是使用的前端技术栈开发、V8 引擎渲染、也同时具备 H5 页面和原生应用的部分优点。逐步在手机系统中的负一屏、信息流等开始应用,随后为一些互联网大厂软件提供了入口,如淘宝、菜鸟驿站、美团、饿了么等,当用户点击到相关的网页链接时,会跳转开启对应的快应用,这是手机系统层面上的手段,是微信小程序做不到的,快应用对于手机用户拥有更强的控制能力。不想使用微信小程序可以不点击开启,或者不使用微信即可,但是快应用早已存在于国产第三方厂商深度定制的 Android 系统中,你没有不使用的权利

小程序应用与原生应用的抨击

当小程序们在猛烈发展的时候,原生开发们又在干什么呢?

Google 与著名开发软件生产商 JetBrains 联合推出了 Kotlin 语言,简化自身 SDK 架构,升级为 AndroidX,发布 Jetpack 组件,大大提升了 Android 开发效率和架构性能。苹果推出 Swift 语言联合 Object-C 语言共同用于 iOS、iPadOS、macOS 的开发,一套代码全平台发布。

在跨平台方面有 FaceBook 推出的使用 JavaScript、HTML 语法、CSS 语法、基于 V8 引擎渲染的 React Native 框架。还有 Google 推出的使用 Dart 语言,Skia 引擎渲染的 Flutter 框架。

那么小程序、原生应用、跨平台应用究竟是个什么定位?什么样的应用该用小程序开发?什么样的应用该用原生开发?

快应用 微信小程序 跨平台应用(RN、Flutter) 原生应用(Android、iOS)
开发方式 JavaScript、TypeScript+类 HTML、CSS JavaScript、TypeScript+类 HTML、CSS RN:JavaScript、TypeScript+类 HTML、CSS。Flutter:Dart Android:Java、Kotlin。iOS:Object-C、Swift
运行载体 运行于国内手机厂商的第三方 Android 深度定制系统 运行于 Android、iOS、iPadOS 三个版本的微信 APP 应用 运行于 iOS、Android 系统 运行于 iOS、Android 系统
渲染性能 较高 较高 极高
支持服务 一般 较多 较多 所有
社区生态 一般 繁荣 较繁荣 繁荣

通过各项指标的对比,可以发现它们的定位:

小程序的灵魂

小程序的出生理念就是用完即走,无需下载

快应用的问世就是要对标微信小程序,在华为推出的自家快应用 IDE 中,同微信小程序一样采用了微软的 VSCode 编辑器开源项目,并且提供了微信小程序转快应用功能,快应用的开发语法设计上就和微信小程序如出一辙,为的就是能够与微信小程序打通,引来开发者进行应用迁移。华为快应用 IDE 中的微信小程序转快应用功能仅仅是语法上的翻译,部分语法需要自己手动替换,复杂架构的项目通过转换功能迁移的过程应该不会顺利,牵扯得越多,问题就越多。

快应用不但在开发上为微信小程序开发者提供一定的便利,还有华为自家的云服务支持(仅限华为快应用)。快应用的野心很大,它可以设置链接规则,当在国内 Android 系统中点击到相关规则链接时,系统将不会跳转至浏览器,而是直接开启快应用跳转到相应界面,并且退出后可选择留存于桌面,这样一来快应用不仅仅要对标微信小程序,还想吃下部分国内原生市场,一箭双雕。甚至已经有类似 Google Play 的快游戏在开发中,也将直接对标微信小游戏。

当然快应用的缺点也很明显,比微信小程序出得晚,并且大多数都是转换后的二次开发项目,从头开发的极少,有许许多多的坑需要人踩,性能比原生应用要低很多,并且功能非常受限,只能完成上层的操作,对于操作系统底层的功能无法实现。

互联网大厂的快应用、小程序做得就比较讨巧,它们会将一些碎片功能,比如看视频、打车、点餐、查快递、地图等重复使用率、分享率高的碎片页面做到快应用、小程序里,提供 APP 打开的入口进行引流,最核心的用户社区、投稿这些有高留存用户能力的模块会仅限在原生 APP 中。

小程序不是被用来作为跨平台的工具,它只是人们利用碎片时间的产物,设计理念里处处透露出了 「用完即走」 的概念,需要做跨平台开发的应用会有专门的跨平台方案,而不是为了跨平台而去跨平台。

到现在应该明白,不管是快应用还是微信小程序,它们应该是我们复杂应用的一个缩影,而不是我们应用本身,我们应该把重复使用率、分享率高的碎片页面做到快应用和微信小程序里,让用户点击分享等链接时可以体验到「用完即走」的理念。原生应用才应该是那个复杂应用本身,最复杂的逻辑、最核心的场景,才是那个应该做进原生应用里的模块,最重要的模块,享受操作系统级别的支持,发挥着最优秀的性能,才能让用户「留着常用」

#H5 #Android