mPaaS 小程序框架作为一款 App 通用框架,帮助开发者面向自身的 App 实现小程序投放。不止如此,小程序代码仅需撰写一次,便可多端投放至自有 App、支付宝、钉钉甚至其他小程序开放平台。
随着小程序技术的愈发成熟,不同平台的优势和典型使用场景各有侧重,同时越来越多的开发者可以结合自身的业务特色,通过小程序作为业务载体,形成单一平台或多平台的协同关系。
而今天,小程序技术的开放,mPaaS 小程序框架作为一款 App 通用框架,帮助开发者面向自身的 App 实现小程序投放。不止如此,小程序代码仅需撰写一次,便可多端投放至自有 App、支付宝、钉钉甚至其他小程序开放平台。
本文将围绕支付宝在移动端架构的演进逐步展开,分享我们在“App 动态性”“提升研发效率”等方面所做的思考和具体实践。同时,针对 mPaaS 小程序能力的开放,也将展开介绍我们如何实现“小程序代码只写一次,多端投放”,而这将给开发者带来完全不同的开发体验。
支付宝一开始仅仅只是一个单体应用的工具型 App,让用户可以在手机完成支付宝相关的业务查询和操作。2013 年后,支付宝逐步转型为平台型 App, 平台型 App 具有“服务化、模块化、工具组件化”的特点。这个时候支付宝的业务不仅仅是支付,还需要给客户提供很多生活相关的服务,例如余额宝、缴电费等。2015 年后支付宝成长为超级 App,此时支付宝里面需要支持大量复杂的业务。2018 年,随着小程序的推出,支付宝开始开放自己的商业能力,用自己流量助力合作伙伴,因此整个 App 面临开放、动态化、高可用的挑战,面对这些挑战,我们把它总结为以下三个方面:
有了问题,我们会通过技术手段,来解决这些问题,我们从上面的三个方向出发,来进行技术选型。
• 其次是 ReactNative/Weex,即使是一次开发,同时运行在双端,但由于是 JS 转成 Native 组件渲染,实际运行起来仍然存在些许差异,导致开发者在写业务界面时,部分差异需要通过 Native 端定制开发来解决。整体而言,ReactNative/Weex 已帮助业务方大幅降低开发成本,但还是存在不小的端适配工作;
• 接下来是 Flutter,从业务开发的角度来说,Flutter 针对双端对齐真的下了大功夫。在大多数场景下,Android 端开发完毕之后能无缝跑在 iOS 端,当然这和它自研的引擎有关。只不过 Flutter 需基于 Dart 语言开发,因此对于开发者而言,部分老业务移植的工作量需考虑在内;
• 最后是 HTML5,带着成熟的语言,成熟的开发模式,双端几乎一样的表现等特性标明 HTML5 仍然是目前我们能落地的开发成本最低的方案。
• 其次是自有渲染引擎的 Flutter,无论是性能还是控件的展现形式,可以说是不亚于原生的体验;
• 接下来便是 ReactNative/Weex 方案,通过将前端代码渲染成本地 Natvie 控件。在早期版本中,由于部分控件优化不到位导致 App 卡顿,因此用户体验的表现不足;
• 最后是 HTML5,完全通过浏览器内核进行渲染,借助预置资源、内核优化等技术,HTML5 可以做到接近原生的体验,但总体性能仍有差异。
• 首先,动态性最优的就是 HTML5 方案:可以访问在线页面,服务端即时生效,也可以通过下发资源的方式,进行动态更新;
• 其次是 ReactNative/Weex 方案,通过一定的定制,开发者可以将前端包热部署、热更新。不过相较于 HTML5 具备的“在线+离线”的动态性,该方案仍然存在一定差距;
• 接下来是 Flutter,虽然有很强大的热重载机制,不过由于 Google 的限制,正式版本 iOS 无法做到热更新,目前的话,可以通过修改引擎,修改JIT和AOT方式来做到iOS热更,或是采取运行时解析渲染来做到动态化,但相比于上面两个方案,在动态性上,flutter略差一些。
• 最后原生,Android/iOS 双端均可以通过一些黑科技手段,进行动态更新,不过由于 iOS 政策禁止,因此在动态性上,原生方案暂时不推荐;
「兼顾动态性、体验、开发效率、开放性的 Hybrid 架构方案,即 mPaaS 小程序」。
根据 w3c 小程序白皮书对小程序的定义,小程序,是一种依赖 Web 技术,集成了原生能力的,新的移动应用程序格式。它具有获取「便捷、连接稳定、安全可靠、性能优异」这四个特点。
接下来我们来拆解小程序完整的技术架构,试着通过「运行阶段、开发阶段、发布阶段」将小程序整体的架构展开。
小程序采用双线程模式将页面渲染和业务逻辑分别放在两个单独的线程中,renderer 运行在 WebView 中,负责渲染界面;小程序业务逻辑运行在单独的 worker 线程,负责事件处理、API 调用和生命周期管理。两个线程之间通过postMessage 以及 onMessage 进行数据交换,数据可以从 worker 线程传递到 render 重新渲染界面,同时renderer也可以将事件传递给对应的 worker 处理。一个 worker 可以对应多个 renderer,方便页面间数据共享和交互。
对于渲染速度、交互响应要求高的场景,如地图,小程序将原生地图组件嵌入到 WebView 上,相比在 Canvas 上渲染地图,绘制速度和效率更高。
资源加载方面,小程序采用离线化方式加载,也就是说当打开小程序时,小程序离线包必须下载到本地,由于每个版本只下载一次,一方面节省了每次请求的资源开销,另一方面启动速度大大提升了。当有新的版本时,发布平台自动比对本地安装的版本和最新版本产生并下发差量包,客户端不需要下载整个包即可更新小程序至最新版。
应用开发必然不能缺少完善工具链的支持,小程序 IDE 集合了编码、调试、预览以及发布等能力。客户端经过简单的适配,即可在真机应用中实时预览和调试小程序。
对小程序架构有了初步的了解之后,我们接下来看看 mPaaS 小程序将如何实现动态发布。这恰恰是 mPaaS 小程序核心的亮点,借助「包发布和管理」的能力,App 的研发与迭代效率得以深度优化。
如上图所示,我们重新定义了研发模式与发布流程,每个小程序都可以作为独立产品,有自己的发布流程,无需等待其他团队。各业务团队进行完全拆分,每个业务独立演进,独立发布。
基于阿里巴巴无线保镖能力,保障小程序请求安全,篡改后的请求无法通过校验。
mPaaS 小程序本身已集成近上百个常用的 API,包括网络、媒体、存储、定位、扫码、蓝牙等等,这些 API 同样可以完美的运行在支付宝中。不仅如此,应用开发者可以将自己特色的功能 mPaaS 小程序扩展能力透出给小程序开发者。这块扩展主要包括三个方面:
• 能力扩展:提供自定义事件能力,支持“小程序 - 原生”,以及“原生 - 小程序”
• 样式扩展:提供多种原生样式定制,包括导航栏,加载动画,启动动画等原生样式
基于 mPaaS 小程序体系,我们可以将非常多的小程序标准,通过工具转化成标准小程序产物,例如开发者自己写的 mPaaS 小程序,抑或是 mPaaS 小程序市场的小程序,或者支付宝 or 其他三方小程序。通过 IDE 转化完成后,我们可以通过两种渠道,投放到不同的端上。使用 mPaaS 发布平台,即可投放到自有 App 中,使用其他三方开放平台,即可投放到对应的端上,一次开发,仅需少量适配,即可多端投放。
当然,对于自身 App 内业务场景相对匮乏的情况,基于 mPaaS 统一的小程序框架能力,阿里系的三方业务场景,能够实现无缝投放,从而满足开发者丰富自身业务场景的需求。
上面介绍完了 mPaaS 小程序的技术架构以及能力,接下来我们聊下基于 mPaaS 小程序在具体研发向的思考。
所谓移动中台能力建设,我们希望通过整合整个 App 架构:在基础层面,将通用的组件下沉,避免重复创造轮子,同时标准化服务接口,为更多的上层业务提供优质、稳定且标准的服务。
在我们完成移动中台能力建设之后,整体的能力就已经具备了,剩下的就是结合小程序框架,建设我们的移动前台能力。
针对一些非常核心的业务逻辑,比如支付报的支付,以及一些对性能要求比较高的业务,比如首页,亦或是一些特殊交互的页面。通常我们是希望通过使用原生页面或是 flutter 等原生技术来实现页面。因为这些页面,通常不会有大改,所以对动态化能力要求不是很严格,同时原生又能满足这些页面多种多样用户体验的需求。
围绕着小程序如何帮助我们改造自身的业务模块,并且逐步逐步形成动态化更新,相信大家有了更全面的认识。目前 mPaaS 小程序已开放免费试用,欢迎接入体验。在接入测试阶段,有任何答疑需求,也欢迎使用钉钉搜索“32843812”加群。
访问2020阿里巴巴双11技术全观专题页,了解更多关于2020双11的技术干货内容
微服务模式将后端单体应用拆分为松耦合的多个子应用,每个子应用负责一组子功能。这些子应用称为“微服务”,多个“微服务”共同形成了一个物理独立但逻辑完整的分布式微服务体系。这些微服务相对独立,通过解耦研发、测试与部署流程,提高整体迭代效率。此外,微服务模式通过分布式架构将应用水平扩展和冗余部署,从根本上解决了单体应用在拓展性和稳定性上存在的先天架构缺陷。但也要注意到微服务模型也面临着分布式系统的典型挑战:如何高效调用远程方法、如何实现可靠的系统容量预估、如何建立负载均衡体系、如何面向松耦合系统进行集成测试、如何面向大规模复杂关联应用的部署与运维。
一、引言 在数字化时代,数据库技术作为信息管理的基石,已经渗透到我们生活的方方面面
一、引言 数据库技术是当代信息系统中不可或缺的一部分,它为企业和个人提供了可靠、高效的数据管理解决方案
一、引言 在信息化和数字化的浪潮中,数据库技术作为企业核心竞争力的关键要素,其重要性不言而喻
一、引言 数据库技术是信息时代的基石,为企业和组织提供了数据存储、检索、分析和管理的核心支撑
【6月更文挑战第13天】随着云计算的不断演进,云原生技术已成为推动现代软件开发、部署和运维的关键力量。本文深入探讨了云原生的核心概念、优势以及它在企业中的应用,旨在揭示如何借助云原生技术实现更高效、灵活和可靠的软件解决方案。
云原生技术正引领着现代软件开发的潮流,其中微服务架构作为其核心理念之一,为复杂应用提供了灵活、可扩展的解决方案。本文将探讨在云原生环境下实施微服务架构的策略和挑战,并结合实际案例分析微服务设计的最佳实践,旨在为开发者提供一套可行的微服务部署与管理指南。
【6月更文挑战第12天】随着企业数字化转型的加速,云计算已成为推动现代IT发展的核心力量。本文深入探讨了云原生技术如何重新定义软件开发、部署和运维,以及它如何使组织能够更快速、更灵活地响应市场变化。我们将分析云原生的关键组成部分,包括容器化、微服务架构、持续集成/持续部署(CI/CD)和无服务器计算,并探讨这些技术如何共同塑造了一个更加高效、可扩展和成本效益高的IT环境。
【Quarkus 技术系列】「云原生架构体系」在云原生时代下的 Java“拯救者”是 Quarkus,那云原生是什么呢?
【Quarkus 技术系列】「云原生架构体系」在云原生时代下的 Java“拯救者”是 Quarkus,那云原生是什么呢?
《深入解析Android 虚拟机》——第2章,第2.2节Java虚拟机概述
2017跟着小虎玩着去软考--趣味好玩解析2015年下半年信息系统项目管理师上午试题6-10题
ClickHouse(02)ClickHouse架构设计介绍概述与ClickHouse数据分片设计
构建高性能微服务架构:现代后端开发的挑战与策略构建高效自动化运维系统的关键策略
IEEE HPCA 2024|LightPool:高性能、轻量级的存储池化架构
构建未来:云原生架构在企业数字化转型中的关键角色网络安全与信息安全:防御前线
*请认真填写需求信息,我们会在24小时内与您取得联系。