基于MPaaS与Lua引擎的统一框架在掌银客户端中的应用实践

Posted 我们的开心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于MPaaS与Lua引擎的统一框架在掌银客户端中的应用实践相关的知识,希望对你有一定的参考价值。

基于MPaaS与Lua引擎的统一框架在掌银客户端中的应用实践文/邹小威

在移动开发日益趋向组件化、微服务的当下,如何设计客户端开发框架,使应用能够兼具原生开发性能与快速的更新迭代能力,是ios客户端开发中需要考虑的首要问题。我行掌银iOS客户端4.0时代使用融易通提供的企业移动应用开发平台(EMP框架),通过集成LUA脚本引擎作为嵌入式脚本引擎,通过将LUA API、iOS系统API以及EMP Native Lib API进行绑定,让客户端开发人员可以通过编写Lua脚本调用Native能力,获得接近原生开发App的性能,同时兼具了快速更新迭代的能力。

掌银5.0之后,为了提高客户端的性能和安全性,移动客户端平台全面向MpaaS框架进行迁移,在迁移的过程中,如何将Lua引擎嵌入MPaaS框架,保证客户端迁移过程的稳定性,同时重构API映射关系,是迁移工程的重中之重。

我小时候有很多节日,五月一日是劳动节,六月一日是儿童节,七月一日是共产党的生日,八月一日是共产党军队的生日,十月一日是共产党中国的生日,还有元旦和春节,因为我父亲是北方人,这些日子我就能吃到包子或者饺子。

基于MPaaS与Lua引擎的统一框架在掌银客户端中的应用实践
基于MPaaS与Lua引擎的统一框架在掌银客户端中的应用实践
相关技术介绍




0 1


MPasS移动开发平台框架

掌银迁移新框架工程中,使用的是阿里提供的移动开发平台(MPaaS),对于移动客户端程序来说,它提供了完整的移动应用设计模式、移动开发框架、移动网关框架、消息推送框架、数据同步框架、移动分析框架等等。

MPaaS 源自支付宝的开发框架,基于Framework的设计思想,将业务隔离成相对独立的模块,并着力追求模块与模块之间的高内聚、低耦合。MPaaS iOS框架直接管理iOS应用的生命周期与UIApplication的代理事件,通过微应用与微服务来统一管理各个业务模块。

基于MPaaS与Lua引擎的统一框架在掌银客户端中的应用实践

MPaaS整个客户端架构总共分成四层:框架层、组件层、服务层、业务层。

框架层:最关键的部分,整个模块化的基础。提供微应用、微服务、pipeline、切面、监控等服务。整体模块化协同开发,都是基于框架层提供的能力,来达到“并行开发”的目的。

组件层:这一层提供的是客户端通用能力,如安全、网络、多媒体、存储这些,这些组件提供稳定的接口给上层使用者,作为客户端的基石,它们至关重要。

服务层:本层就是一些核心服务能力,通过将客户端服务能力进行抽取并进行服务化,服务App本身,也服务各个生态业务。

业务层:业务方和第三方服务提供者,只需专注于业务逻辑与界面的实现,调用整体框架提供的各种能力,最后通过整体应用的动态化能力进行多维发布。

0 2


Lua脚本

Lua的脚本解析器是通过C语言编写的,因此,Lua提供了相当丰富的C语言定义的接口来访问和操作Lua元素。iOS开发使用过的Objective-C语言也可以很方便地与Lua脚本进行交互。因此,在iOS工程中,Lua脚本既可以作为程序扩展脚本,也可以作为配置文件来代替plist、xml等格式的配置文件,具有强大的可扩展性、轻量性以及其他特性。

可扩展性:Lua使用ANSI C编写而成,几乎在所有操作系统和平台上都可以编译、运行。Lua脚本可以很容易地被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在嵌入和扩展应用程序的场景中被广泛使用。

轻量性:轻量级Lua语言的官方版本只包括一个精简的核心和最基本的库,一个完整的Lua解释器不过200K。在目前所有脚本语言中,Lua无疑是将小巧和快速结合的最完美的一个。

其他特性:同时支持面向过程编程和函数式编程(functional programming);自动内存管理;只提供了一种通用类型的表(table),用它可以实现数组、哈希表、集合和对象;语言内置模式匹配;闭包(closure);函数也可以看作一个值;提供多线程支持;通过闭包和table可以很方便地支持面向对象编程所需要的一些关键机制,比如数据抽象、虚函数、继承和重载等。

03



Native AppWeb App离线包模式


Native App即使用原生App开发模式,利用iOS或者android平台官方提供的开发工具进行App的开发,一般而言可以使用的OS特性最多,包括访问手机的所有功能,如定位、GPS、摄像头等,其次,响应速度快且可以在离线的情况下使用。但是在Native App开发过程中,开发人员需要对不同的操作系统版本进行单独开发适配,非常费时费力。

Web App通过依赖H5框架,在移动应用中嵌入类似网页的结构,而非单独建立程序,因此,获得了快速开发、一次开发多平台运行、开发难度降低等优点,适合在大部分对OS特性需求不高的功能上使用,其缺点在于功能比较有限,不能调用手机部分功能,运行性能不如原生App且无法离线浏览。

离线包:对于Web App来说,存在一个致命缺陷就是需要转换时间,在Web程序中,通过使用静态化资源预加载一些html、CSS、JS文件,可以提前将Web程序打开,而不用等待H5页面请求数据返回后再打开,如此一来,APP启动流程和页面加载流程与普通的Native+Web程序发生变化,如下图所示:

APP启动时:

基于MPaaS与Lua引擎的统一框架在掌银客户端中的应用实践

页面加载时:

基于MPaaS与Lua引擎的统一框架在掌银客户端中的应用实践


基于MPaaS与Lua引擎的统一框架在掌银客户端中的应用实践
基于MPaaS与Lua引擎的统一框架在掌银客户端中的应用实践
掌银移动端应用实践



在框架迁移的过程中,为了融合原有Lua脚本与MPaaS框架,该框架通过使用Lua+xhtml+css方案,在用户进行手机操作而产生各种事件时,首先通过触发执行统一的Lua脚本,下载静态xhtml+css文件,预载展示层控件。在这一阶段,通过统一标识触发事件,服务端可以控制所返回的离线文件,这一阶段流程图如下所示:

基于MPaaS与Lua引擎的统一框架在掌银客户端中的应用实践

通过使用上述架构,首先实现了业务逻辑和客户端框架的剥离,客户端开发无需关注繁琐的业务展示逻辑,而是交由统一的事件处理程序与结果解释器来展示页面。由此产生两个好处:

剥离了客户端的业务展示层部分代码,交由前后端进行处理,实现统一的事件处理逻辑。

在展示层功能需要进行更新时无需改变客户端代码,因此无需重新打包上架审核,实现了热更新。

未使用传统的JSPatch或者Wax等JS注入的形式修改客户端代码,上架APPStore审核时不会因此遭到拒绝。

从安全性角度来说,使用JSPatch、Rollout、Wax等热修复框架带来了一定的安全隐患,这些框架本质上都是通过JS脚本调用和替换任意OC的方法,可能对使用了这些框架的APP下发恶意脚本,造成IOS应用程序的安全隐患。从代码运行效率来说,使用JS注入的方式,往往不能达到原生代码的运行效率,编译的过程会加重手机的负担,对用户带来不好的体验。

基于MPaaS与Lua引擎的统一框架在掌银客户端中的应用实践
END

基于MPaaS与Lua引擎的统一框架在掌银客户端中的应用实践

轮值总编:曹宁

责任编辑:王咪咪

美编:李沫

技术支持:陈文建

基于MPaaS与Lua引擎的统一框架在掌银客户端中的应用实践

基于MPaaS与Lua引擎的统一框架在掌银客户端中的应用实践

我们的开心 · 总编辑部

(e 语)


-  
快 乐 生 活 
开 心 工 作 


   
我 们 的 开 心

微信号:abc_kx
本文为“我们的开心”第 4340期文章  
转载本号文章请联系我们

■欢迎来稿:请按“作品名-作者-部门”命名,发送到abckx@abchina.com

以上是关于基于MPaaS与Lua引擎的统一框架在掌银客户端中的应用实践的主要内容,如果未能解决你的问题,请参考以下文章

基于Lua的游戏服务端框架简介

C++中搭建Lua脚本引擎开发框架4.5G价值40高清完整资源

WebView开发React.js遇到的问题和解决方案

C3C++中搭建Lua脚本引擎开发框架4.5G价值40it教程高清完整资源

mPaaS 3.0 多媒体组件发布 | 支付宝百亿级图片组件 xMedia 锤炼之路 (图片缓存篇)

mPaaS 服务端核心组件体系概述:移动 API 网关 MGS