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

本文将围绕支付宝在移动端架构的演进逐步展开,分享我们在“App 动态性”“提升研发效率”等方面所做的思考和具体实践。同时,针对 mPaaS 小程序能力的开放,也将展开介绍我们如何实现“小程序代码只写一次,多端投放”,而这将给开发者带来完全不同的开发体验。


支付宝 App 发展历程

首先让我们先回顾看看支付宝 App 在近几年的具体发展历程。

 

支付宝一开始仅仅只是一个单体应用的工具型 App,让用户可以在手机完成支付宝相关的业务查询和操作。2013 年后,支付宝逐步转型为平台型 App, 平台型 App 具有“服务化、模块化、工具组件化”的特点。这个时候支付宝的业务不仅仅是支付,还需要给客户提供很多生活相关的服务,例如余额宝、缴电费等。2015 年后支付宝成长为超级 App,此时支付宝里面需要支持大量复杂的业务。2018 年,随着小程序的推出,支付宝开始开放自己的商业能力,用自己流量助力合作伙伴,因此整个 App 面临开放、动态化、高可用的挑战,面对这些挑战,我们把它总结为以下三个方面:

1.动态性及体验
• 面对多样的需求,如何保证业务的快速迭代?
• 保证 App 动态更新的前提下,如何保障用户体验?

2.研发效率
• 如何做到代码一次编写,多端复用?
• 没有客户端开发经验,如何提升开发效率?

3.开放生态
• 如何将能力开放给更多开发者?
• 如何连接更多生态平台,丰富自身 App 场景?

有了问题,我们会通过技术手段,来解决这些问题,我们从上面的三个方向出发,来进行技术选型。

2.png

首先我们从业务开发成本角度来看:
• 原生作为最基础的开发模式,需要双端都进行开发,无疑成本是最高的;
• 其次是 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 政策禁止,因此在动态性上,原生方案暂时不推荐;

分析完四种方案的不同的几个方向,那么 mPaaS 带来的答案是:
「兼顾动态性、体验、开发效率、开放性的 Hybrid 架构方案,即 mPaaS 小程序」。

mPaaS 小程序技术解析

什么是小程序呢?
根据 w3c 小程序白皮书对小程序的定义,小程序,是一种依赖 Web 技术,集成了原生能力的,新的移动应用程序格式。它具有获取「便捷、连接稳定、安全可靠、性能优异」这四个特点。

mPaaS 小程序,基于 Web 技术,学习成本低。
一套小程序代码,同时支持 iOS 和 Android,接近原生体验。
同时提供丰富的组件和 API,如获取用户信息、本地存储、支付功能等。

接下来我们来拆解小程序完整的技术架构,试着通过「运行阶段、开发阶段、发布阶段」将小程序整体的架构展开。

3.png

• 运行阶段
小程序采用双线程模式将页面渲染和业务逻辑分别放在两个单独的线程中,renderer 运行在 WebView 中,负责渲染界面;小程序业务逻辑运行在单独的 worker 线程,负责事件处理、API 调用和生命周期管理。两个线程之间通过postMessage 以及 onMessage 进行数据交换,数据可以从 worker 线程传递到 render 重新渲染界面,同时renderer也可以将事件传递给对应的 worker 处理。一个 worker 可以对应多个 renderer,方便页面间数据共享和交互。

对于渲染速度、交互响应要求高的场景,如地图,小程序将原生地图组件嵌入到 WebView 上,相比在 Canvas 上渲染地图,绘制速度和效率更高。

资源加载方面,小程序采用离线化方式加载,也就是说当打开小程序时,小程序离线包必须下载到本地,由于每个版本只下载一次,一方面节省了每次请求的资源开销,另一方面启动速度大大提升了。当有新的版本时,发布平台自动比对本地安装的版本和最新版本产生并下发差量包,客户端不需要下载整个包即可更新小程序至最新版。

• 开发与发布阶段
应用开发必然不能缺少完善工具链的支持,小程序 IDE 集合了编码、调试、预览以及发布等能力。客户端经过简单的适配,即可在真机应用中实时预览和调试小程序。

对小程序架构有了初步的了解之后,我们接下来看看 mPaaS 小程序将如何实现动态发布。这恰恰是 mPaaS 小程序核心的亮点,借助「包发布和管理」的能力,App 的研发与迭代效率得以深度优化。

4.png

如上图所示,我们重新定义了研发模式与发布流程,每个小程序都可以作为独立产品,有自己的发布流程,无需等待其他团队。各业务团队进行完全拆分,每个业务独立演进,独立发布。

在发布过程中,要遵守以下流程:
1.指标线性,定义每次发布的业务和性能指标;
2.智能灰度,内部灰度、外部灰度、指定灰度;
3.实时监控,修复循环;
4.线上运维修复手段技术兜底。

然后我们再聊下小程序的安全。
• 连接安全
基于阿里巴巴无线保镖能力,保障小程序请求安全,篡改后的请求无法通过校验。
• 包体安全
包体经过加密、加签,保障下载过程安全,篡改后的小程序包无法正常使用。
• 权限安全
完整的权限管理体系,针对不同小程序开放不同权限,保障用户的隐私安全。

接着我们看下小程序框架能力扩展体系。

mPaaS 小程序本身已集成近上百个常用的 API,包括网络、媒体、存储、定位、扫码、蓝牙等等,这些 API 同样可以完美的运行在支付宝中。不仅如此,应用开发者可以将自己特色的功能 mPaaS 小程序扩展能力透出给小程序开发者。这块扩展主要包括三个方面:
• 能力扩展:提供自定义事件能力,支持“小程序 -> 原生”,以及“原生 -> 小程序”
• 样式扩展:提供多种原生样式定制,包括导航栏,加载动画,启动动画等原生样式
• 组件扩展:提供自定义组件能力,扩展小程序标签

最后我们再聊聊小程序的多端投放与生态。

5.png

基于 mPaaS 小程序体系,我们可以将非常多的小程序标准,通过工具转化成标准小程序产物,例如开发者自己写的 mPaaS 小程序,抑或是 mPaaS 小程序市场的小程序,或者支付宝 or 其他三方小程序。通过 IDE 转化完成后,我们可以通过两种渠道,投放到不同的端上。使用 mPaaS 发布平台,即可投放到自有 App 中,使用其他三方开放平台,即可投放到对应的端上,一次开发,仅需少量适配,即可多端投放。

 

6.png

当然,对于自身 App 内业务场景相对匮乏的情况,基于 mPaaS 统一的小程序框架能力,阿里系的三方业务场景,能够实现无缝投放,从而满足开发者丰富自身业务场景的需求。

基于 mPaaS 小程序的移动端能力构建

上面介绍完了 mPaaS 小程序的技术架构以及能力,接下来我们聊下基于 mPaaS 小程序在具体研发向的思考。
• 移动中台能力建设

7.png

所谓移动中台能力建设,我们希望通过整合整个 App 架构:在基础层面,将通用的组件下沉,避免重复创造轮子,同时标准化服务接口,为更多的上层业务提供优质、稳定且标准的服务。
那么我们就需要从两个方面来处理这个事情。

  • 基础组件
    我们在开发过程中可能会存在这样一个问题,就是两个团队协作开发,可能大家有自己沉淀的一些经典组件,我们可以对这些组件进行沉淀,同时,还可以通过小程序的自定义组件能力,对小程序提供服务。
  • 核心能力服务化
    组件沉淀后,对于一些核心的业务能力,我们需要将这部分能力进行服务化,抽象出标准的服务接口or小程序API,供其他团队或是第三方生态调用。比如说支付宝的支付服务、芝麻信用服务等,都是依托于服务化,最终良好的为其他业务提供服务的。

移动前台建设

8.png

在我们完成移动中台能力建设之后,整体的能力就已经具备了,剩下的就是结合小程序框架,建设我们的移动前台能力。

  • 核心业务体验优化
    针对一些非常核心的业务逻辑,比如支付报的支付,以及一些对性能要求比较高的业务,比如首页,亦或是一些特殊交互的页面。通常我们是希望通过使用原生页面或是 flutter 等原生技术来实现页面。因为这些页面,通常不会有大改,所以对动态化能力要求不是很严格,同时原生又能满足这些页面多种多样用户体验的需求。
  • 复杂业务小程序化
    对一些复杂的二级业务,可能业务本身会频繁的进行迭代,那么对于原生 native 将会是灾难般的开发体验,这时候,我们需将这部分业务剥离出来,通过前端技术将业务改造成小程序,再通过发布服务将离线包发布到应用上。这样,就满足了我们业务复杂多变的场景。
  • 三方生态化
    我们不仅自身提供各种各样的服务,也需要引入第三方服务来服务更多的人群,传统的 H5 页面由于过于宽泛的前端标准,加上有一定的技术门槛,这里就不如规范、简单的小程序了。同时,在利用上面我们介绍的移动中台建设,对第三方小程序提供多种多样的自有中台能力,完成场景多样化。

围绕着小程序如何帮助我们改造自身的业务模块,并且逐步逐步形成动态化更新,相信大家有了更全面的认识。目前 mPaaS 小程序已开放免费试用,欢迎接入体验。在接入测试阶段,有任何答疑需求,也欢迎使用钉钉搜索“32843812”加群。

我和我的同事等待你的到来。

 

 

原文链接: https://developer.aliyun.com/article/767886?utm_content=g_1000163105
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖音实战~分布式文件存储~SpringBoot集成MinIO

文章目录1. 引入依赖2. yml配置3. 客户端配置4. 工具类5. 需求实战6. 效果图1. 引入依赖 <!-- MinIO --><dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.2.1</version></dependency>…

笑联 x mPaaS | 12 个模块,全面小程序化,如何打造真正的一次开发复用多端?

这篇故事围绕着一款 App 基于 mPaaS 小程序进行改造娓娓展开。 作为国内校园服务场景最丰富的平台&#xff0c;笑联 App 已覆盖国内 130 所高校&#xff0c;服务近百万高校学生。 截止目前&#xff0c;笑联 App 内的 12 个业务模块目前已顺利实现小程序化。不仅获得媲美原生应用…

万字长文梳理:从0开始,步入Service Mesh微服务架构的世界

来源 | 无敌码农责编 |贾凯强头图 | 下载于视觉中国新一代微服务架构——Service Mesh已经引发了诸多关注。在微服务架构盛行的今天&#xff0c;像Spring Cloud这样的微服务框架大家已然耳熟能详 &#xff0c;因为大部分互联网公司都在此基础上构建过第一代微服务体系&#xff…

开放下载!《大促背后的前端核心业务实践》

《大促背后的前端核心业务实践》电子书重磅发布! 2020年618大促已经过去&#xff0c;作为淘系每年重要的大促活动&#xff0c;淘系前端在其中扮演着什么样的角色&#xff0c;如何保证大促的平稳进行&#xff1f;又在其中应用了哪些新技术&#xff1f;淘系技术联合阿里云开发者…

33个常见问题!超全Windows排查手册

无论你是新手还是老手&#xff0c;你的Windows系统都会遇到不容易诊断的问题。而当发生这种情况时&#xff0c;你会怎么做&#xff1f;希望本书可以在系统出现问题但是又不知道到底发生了什么以及问题出现在哪里时&#xff0c;为大家提供解决思路和方法&#xff0c;高效的解决问…

上市之后,青云存储平台QingStor也要“进军”云原生

作者 | 陈利鑫头图 | 下载于东方IC出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;3 月 16 日&#xff0c;北京青云科技股份有限公司&#xff08;以下简称“青云科技”&#xff09;登录科创板&#xff0c;昔日里频频出现在公众视野的云计算企业&#xff0c;…

抖音实战~发布短视频流程梳理

文章目录一、传统文件上传1. 上传流程2. 上传时序图二、CDN文件上传2.1. 上传流程2.2. 上传时序图2.3. 方案评估一、传统文件上传 1. 上传流程 2. 上传时序图 二、CDN文件上传 2.1. 上传流程 2.2. 上传时序图 2.3. 方案评估 第一种文件上传&#xff0c;消耗带宽2次&#xff…

Docker中级篇|深入探究Docker

简介&#xff1a; 深入探究Docker Docker镜像理解 Docker镜像是什么 镜像是一种轻量级、可执行的独立软件包&#xff0c;用来打包软件运行环境和基于运行环境开发的软件&#xff0c;它包含运行某个软件所需的所有内容&#xff0c;包括代码、运行时库、环境变量和配置文件 D…

掌门教育微服务体系 Solar | 阿里巴巴 Nacos 企业级落地中篇

联席作者&#xff1a;吴毅挺 任浩军 童子龙 郑重鸣谢&#xff1a;Nacos - 彦林&#xff0c;Spring Cloud Alibaba - 小马哥、洛夜&#xff0c;Nacos 社区 - 张龙&#xff08;pader&#xff09;、春少&#xff08;chuntaojun&#xff09; 掌门教育自 2014 年正式转型在线教育以…

经典永不过时!重温设计模式

导语&#xff1a;在软工程中&#xff0c;设计模式&#xff08;design pattern&#xff09;是对软件设计中普遍存在&#xff08;反复出现&#xff09;的各种问题&#xff0c;所提出的解决方案。这个术语是由埃里希伽玛&#xff08;Erich Gamma&#xff09;等人在1990年代从建筑设…

抖音实战~项目关联UniCloud

文章目录一、云存储1. 登录UniCloud2. 创建服务空间3. 详情查看二、项目关联UniCloud2.1. 创建云开发环境2.2. 关联云服务空间2.3. 效果验证一、云存储 1. 登录UniCloud 链接&#xff1a;https://unicloud.dcloud.net.cn/login 云存储空间&#xff1a;https://unicloud.dcl…

Flutter+FaaS一体化任务编排的思考与设计

作者&#xff1a;闲鱼技术-古风 FlutterServerless三端一体研发架构&#xff0c;客户端不仅仅是编写双端的代码&#xff0c;而是扩展了客户端的工作边界&#xff0c;形成完整的业务闭环。在新的研发模式落地与实践的过程中&#xff0c;一直在思考如何提高FaaS端研发体验与研发…

抖音实战~实现App端视频上传、发布、落库

文章目录一、API阅读1. 选择或拍摄视频2. 云函数API~文件上传3. 视频截帧二、App端视频上传流程2.1. 上传流程图2.2. 流程简述三、前端源码实战3.1. 选择/拍摄短视频3.2. 短视频上传3.3. 进度条页面3.4. 补充短视频内容3.5. 视频发布3.6. 视频预览四、后端源码实战4.1. 短视频发…

从微服务到 Serverless | 开源只是开始,终态远没有到来

开源只是开始&#xff0c;终态远没有到来。 从微服务开源&#xff0c;到 Serverless 开源&#xff0c;我们正持续将阿里沉淀的技术能力进行开放。 只是这一次不同的地方在于&#xff0c;借助 Serverless 能力的释放&#xff0c;将帮助前端进入一个崭新的时代&#xff0c;只需…

从Python到AI,这条路好走吗?

大家都在学Python的时候&#xff0c;怎么才能让自己更有竞争力&#xff1f;Python 的应用方向有很多&#xff0c;基本每个方向都是大热门&#xff0c;但至今为止&#xff0c;人工智能行业仍处于人才稀缺的情况。正因这样&#xff0c;近几年来&#xff0c;AI 成为了广大 Python …

Flutter瀑布流及通用列表解决方案

作者&#xff1a;闲鱼技术-夜澜 背景 目前闲鱼业务中无论是首页还是搜索页都有大量可以落地瀑布流的场景&#xff0c;而在Flutter原生中只提供了ListView, GridView&#xff0c;无法提供自定义布局的能力。 而在社区中&#xff0c;一般瀑布流的解决方案都是基于SliverMultiB…

闲鱼的商品结构化是如何演进的(超详细)

作者&#xff1a;闲鱼技术-吴白 引言 商品的信息结构化程度在某种意义上来说决定导购效率的天花板。闲鱼商品结构化和淘宝/天猫最大的区别在于闲鱼卖家都是个人用户&#xff0c;无论是专业程度还是行动力远不及淘宝卖家。为了不阻碍商品发布&#xff0c;闲鱼一直倡导轻发布&a…

一文看懂5G射频的“黑科技”

作者 | 小枣君来源 | 鲜枣课堂&#xff08;ID&#xff1a;xzclasscom&#xff09;手机&#xff0c;作为移动互联网时代的标配&#xff0c;已经走进了我们每个人的生活。有了它&#xff0c;我们可以随心所欲地聊天、购物、追剧&#xff0c;享受美好的人生。正因为手机如此重要&a…

抖音实战~首页视频~下拉刷新

文章目录1. 配置下拉刷新2. 下拉刷新监听3. tab监听索引4. 控制台监控5. 父子组件调用6. 效果图1. 配置下拉刷新 在pages.json配置文件中添加如下配置&#xff1a; "enablePullDownRefresh":true //开启下拉刷新2. 下拉刷新监听 // 当前页下拉刷新onPullDownRefre…

支付宝研究员王益的建议:“学好语文,才能写好代码”

王益&#xff0c;蚂蚁集团研究员&#xff0c;开源项目SQLFlow 和 ElasticDL 的负责人。他从10岁开始写代码。曾经用自己焊接的电路板扩展“中华学习机”来把自家的老式“威力牌”双筒洗衣机改造成了自动洗衣机&#xff1b;用Apple BASIC语言和6502汇编混合编程写了人生中第一个…