跨平台框架 ReactNative Weex 原理
讲跨平台框架之前,了解JavaScriptCore 和 V8 会有帮助,也是必要的。React Native的核心驱动力就来自于JS Engine. 你写的所有JS和JSX代码都会被JS Engine来执行, 没有JS Engine的参与,你是无法享受ReactJS给原生应用开发带来的便利的。在iOS上,默认的就是JavaScriptCore, iOS 7之后的设备都支持. iOS 不允许用自己的JS Engine. JavaScriptCore来自于WebKit, 所以,安卓上默认也是用JavaScriptCore
你深入了解React Native的第一站应该是 JavaScriptCore Weex则是V8
image
Android Bridge和IOS Bridge
Android Bridge和IOS Bridge的关键就是js引擎JSCore或V8, 负责JS代码解释执行,然后利用引擎强大的DOM操作管理能力来管理所有UI节点,每次刷新前把所有节点信息更新完毕以后再给yoga做排版,然后再调用原生组件来绘制。所以JSCore或V8是连接js和安卓原生Java语言(或苹果原生oc)重要的桥。有了他们可以让js和原生语言相互高效的通讯。
JSCore或V8
简单点讲,JSCore或V8就是js引擎,因为Android和iOS不能直接运行js,通过js引擎运行js,然后通过JS-NATIVE通信(V8这里采用j2v8方案)
JSCore是WebKit默认内嵌的JS引擎,之所以说是默认内嵌,是因为很多基于WebKit分支开发的浏览器引擎都开发了自家的JS引擎,其中最出名的就是Chrome的V8。这些JS引擎的使命都相同,那就是解释执行JS脚本。而从上面的渲染流程图我们可以看到,JS和DOM树之间存在着互相关联,这是因为浏览器中的JS脚本最主要的功能就是操作DOM树,并与之交互
YOGA(Flex引擎)
- Facebook出品。意在打造一个跨iOS、Android、Windows平台在内的布局引擎,兼容Flexbox布局方式,让界面布局更加简单。
- 目前,各个平台都有自己的一套解决方案。iOS平台有AutoLayout,Android有容器布局系统,而Web端有基于CSS的布局系统。多种布局系统共存所带来的弊端是很明显的,平台间的共享变得很困难,而每个平台都需要专人来开发维护,增加了开发成本。
- YOGA就是为解决把前端的布局对应到Android/iOS的不同平台上,像微信小程序、ReactNative这种,都是采用js/html/css开发,客户端native展现的方式,这其中的布局的引擎就是YOGA,他可以让开发者只写一次布局,就可以得到在不同端上的布局展示。并高效高速动态更改view的布局。