MLN简介
经历了两年多的打磨及开发实践,MLN终于开源了,git地址
MLN是陌陌技术团队开源的移动跨平台开发框架,因其较低的学习成本、较高的人员效率、良好的性能、支持线上热更新等优势,目前在陌陌App中已全面替换weex,成为唯一在用的跨平台方案,并广泛应用于多种业务场景。
MLN的历史追根溯源应是来自于阿里的LuaViewSDK,可惜LuaView在2017年8月14号最后一次提交之后就再也没有更新了。
MLN的原理
MLN即MOMO Lua Native,是Lua程序到Android、iOS原生的媒介,与RN和weex依赖JSCore不同,MLN处理Lua to Native的介质是Lua虚拟机
,Lua虚拟机支持将C函数映射到虚拟机中,并支持在Lua代码中调用这些C函数。
在安卓和iOS原生,每个Activity
和ViewController
实例都跑一个120k左右的Lua虚拟机,Lua虚拟机执行Lua程序,并通过原生和Lua虚拟机间的bridges实现和原生的通信,从而实现各种操作。与weex或RN通过JSCore与原生通信异曲同工。
一句话概括:MLN中用到的基础UI组件、网络组件等都是基于原生的,在创建Lua虚拟机后将一些列原生方法包装成C函数注册到虚拟机中,形成Lua到Native的bridges,在Lua程序中调用这些bridge实现调用原生的目的。
MLN的优势
- 包体积小,加载速度快,流畅度高。
- 开发调试支持热重载,提升开发调试体验,节约时间成本。
- 支持热更新,通过网络下载lua离线包即可实现热更新。
- 提升开发效率,一套代码适应Android和iOS两端。
MLN做了一些工作去尽量抹平两端差异,因此有时候可能会感到稍许别扭,比如Android上TableView不是继承自ScrollView,就导致你可能无法使用setContentOffset方法,实际开发体验来看,这些影响并不大。
- 节省人力成本。
据团队内部开发情况,实际能节省至少30%的人力成本。之所以不是50%,是以因为考虑到要调试并处理一些平台差异性问题,对于一个熟练的开发者来说,这部分时间是相当少的。
- 极为方便的支持扩展Bridge
如在原生实现一些业务逻辑接口,注册到Lua虚拟机中即可在Lua层调用。
什么是Lua
Lua是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于 1993 年开发的,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua是一种轻量语言,它的官方版本只包括一个精简的核心和最基本的库。这使得Lua体积小、启动速度快。它用ANSI C
语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。Lua可以很容易地被扩展:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。Lua的目标是成为一个很容易嵌入其它语言中使用的语言。【来自维基百科】
MLN的学习成本
在大家关心的学习方面,大致可以做如下规划
- 学习Lua语法
- 了解MLN提供的基础组件及IDE的使用
- 从demo开始熟悉MLN开发中的各种套路
对于有多年移动开发经验的开发者来说学习lua以及MLN简直小菜一碟,希望大家对此抱有兴趣和信心。
本人自18年8月入职后开始学习并使用Lua重构weex相关业务,用半年时间在版本开发间隙完成所在项目组的所有weex业务重构工作。刚入职时并不知道什么是lua,也没有weex或RN相关开发经验,加上当时MLN还未达到开源标准,而且没有可以请教的拥有MLN开发经验的同学,其中很多酸甜苦辣也都默默的扛了过来~~~
关于以上列的学习规划,接下来我会在工作间隙不断迭代,争取早日完成《Lua入门系列文档》,希望能有助于大家学习和参考,为及时获取最新更新可关注微信公众号:宋萌萌萌
扫码关注公众号:宋萌萌萌