观点评论|让小程序在自有App中启动的技术来了:mPaaS小程序架构深度解析

_原题为 让小程序在自有App中启动的技术来了:mPaaS小程序架构深度解析
随着小程序技术的愈发成熟 , 不同平台的优势和典型使用场景各有侧重 , 同时越来越多的开发者可以结合自身的业务特色 , 通过小程序作为业务载体 , 形成单一平台或多平台的协同关系 。
而今天 , 小程序技术的开放 , mPaaS 小程序框架作为一款 App 通用框架 , 帮助开发者面向自身的 App 实现小程序投放 。 不止如此 , 小程序代码仅需撰写一次 , 便可多端投放至自有 App、支付宝、钉钉甚至其他小程序开放平台 。
本文将围绕支付宝在移动端架构的演进逐步展开 , 分享我们在“App 动态性”“提升研发效率”等方面所做的思考和具体实践 。 同时 , 针对 mPaaS 小程序能力的开放 , 也将展开介绍我们如何实现“小程序代码只写一次 , 多端投放” , 而这将给开发者带来完全不同的开发体验 。
支付宝 App 发展历程 首先让我们先回顾看看支付宝 App 在近几年的具体发展历程 。
观点评论|让小程序在自有App中启动的技术来了:mPaaS小程序架构深度解析
文章图片

支付宝一开始仅仅只是一个单体应用的工具型 App , 让用户可以在手机完成支付宝相关的业务查询和操作 。 2013 年后 , 支付宝逐步转型为平台型 App ,平台型 App 具有“服务化、模块化、工具组件化”的特点 。 这个时候支付宝的业务不仅仅是支付 , 还需要给客户提供很多生活相关的服务 , 例如余额宝、缴电费等 。 2015 年后支付宝成长为超级 App , 此时支付宝里面需要支持大量复杂的业务 。 2018 年 , 随着小程序的推出 , 支付宝开始开放自己的商业能力 , 用自己流量助力合作伙伴 , 因此整个 App 面临开放、动态化、高可用的挑战 , 面对这些挑战 , 我们把它总结为以下三个方面:
1.动态性及体验
? 面对多样的需求 , 如何保证业务的快速迭代?
? 保证 App 动态更新的前提下 , 如何保障用户体验?
2.研发效率
? 如何做到代码一次编写 , 多端复用?
? 没有客户端开发经验 , 如何提升开发效率?
3.开放生态
? 如何将能力开放给更多开发者?
? 如何连接更多生态平台 , 丰富自身 App 场景?
有了问题 , 我们会通过技术手段 , 来解决这些问题 , 我们从上面的三个方向出发 , 来进行技术选型 。
观点评论|让小程序在自有App中启动的技术来了:mPaaS小程序架构深度解析
文章图片

首先我们从业务开发成本角度来看:
? 原生作为最基础的开发模式 , 需要双端都进行开发 , 无疑成本是最高的;
? 其次是 ReactNative/Weex , 即使是一次开发 , 同时运行在双端 , 但由于是 JS 转成 Native 组件渲染 , 实际运行起来仍然存在些许差异 , 导致开发者在写业务界面时 , 部分差异需要通过 Native 端定制开发来解决 。 整体而言 , ReactNative/Weex 已帮助业务方大幅降低开发成本 , 但还是存在不小的端适配工作;
? 接下来是 Flutter , 从业务开发的角度来说 , Flutter 针对双端对齐真的下了大功夫 。 在大多数场景下 , Android 端开发完毕之后能无缝跑在 iOS 端 , 当然这和它自研的引擎有关 。 只不过 Flutter 需基于 Dart 语言开发 , 因此对于开发者而言 , 部分老业务移植的工作量需考虑在内;
? 最后是 HTML5 , 带着成熟的语言 , 成熟的开发模式 , 双端几乎一样的表现等特性标明 HTML5 仍然是目前我们能落地的开发成本最低的方案 。
接下来我们讨论用户体验:
【观点评论|让小程序在自有App中启动的技术来了:mPaaS小程序架构深度解析】? 首先 , 原生的体验毋庸置疑是最好的;
? 其次是自有渲染引擎的 Flutter , 无论是性能还是控件的展现形式 , 可以说是不亚于原生的体验;
? 接下来便是 ReactNative/Weex 方案 , 通过将前端代码渲染成本地 Natvie 控件 。 在早期版本中 , 由于部分控件优化不到位导致 App 卡顿 , 因此用户体验的表现不足;
? 最后是 HTML5 , 完全通过浏览器内核进行渲染 , 借助预置资源、内核优化等技术 , HTML5 可以做到接近原生的体验 , 但总体性能仍有差异 。
接着是动态性的支持:
? 首先 , 动态性最优的就是 HTML5 方案:可以访问在线页面 , 服务端即时生效 , 也可以通过下发资源的方式 , 进行动态更新;
? 其次是 ReactNative/Weex 方案 , 通过一定的定制 , 开发者可以将前端包热部署、热更新 。 不过相较于 HTML5 具备的“在线+离线”的动态性 , 该方案仍然存在一定差距;
? 接下来是 Flutter , 虽然有很强大的热重载机制 , 不过由于 Google 的限制 , 正式版本 iOS 无法做到热更新 , 目前的话 , 可以通过修改引擎 , 修改JIT和AOT方式来做到iOS热更 , 或是采取运行时解析渲染来做到动态化 , 但相比于上面两个方案 , 在动态性上 , flutter略差一些 。
? 最后原生 , Android/iOS 双端均可以通过一些黑科技手段 , 进行动态更新 , 不过由于 iOS 政策禁止 , 因此在动态性上 , 原生方案暂时不推荐;


推荐阅读