初识weex与rax

简介:

背景

weex目前在集团乃至全球发展的如火如荼,最近也正在了解相关的资料,目前只是一些初步的了解,在这里分享一下。weex是跨端渲染框架,就是说一套代码,可以在web、ios和android跑,而且在后两者中,是以native方式跑的,因此在渲染效率和交互流畅度上,均有上乘的表现。weex于2016年开始在淘系双11、双12大促大规模使用,稳定可靠,可以看鬼道的介绍:《Weex 在双十一会场的大规模应用:业务支撑、稳定性保障和秒开实战》

那么为什么要做weex,相信做过web移动端页面的开发非常清楚,主要原因就是web在渲染和操作体验上的表现,相对于native来说又慢又卡,但是native虽然好,但开发却远比h5麻烦,不但开发环境麻烦、部署麻烦,还需适配android和ios两大平台,甚至需要招不同的程序员,h5尽管也有平台浏览器内核的兼容性问题,但开发容易上手,相对于native的开发成本,这些处理兼容性问题的代价基本上算是可以忽略了。

react-native、react-web与weapp

如何即让学习成本低、代码写的少,部署简单,又尽可能地在三端都能跑流畅,是全球各大互联网公司都在较劲脑汁思考的问题,比如facebook的react-native,实现了“learn once,run anywhere”,但因为其还是不能实现h5的渲染降级,因此说的是learn once,即web端还是需要再写一遍,react-web做了一个能让react-native代码跑在web的事情,为什么react-native能实现一份代码跑两端,react-web又能扩展其web渲染呢?其实是因为无论是web、ios还是android,尽管其底层实现的api或控件不同,但都能实现相同功能的布局和界面,因此要实现一份代码跑三端,最关键的是把三端的布局细节封装并对上层屏蔽,上层UI描述使用一样的DSL,在native渲染的时候,再根据不同平台走不同的renderer。

再说集团,在3年前,集团的weapp也做了这个事情,它使用json或xml描述界面,包含界面的布局、样式、事件甚至联动,然后能实现三端渲染:

{
    "type":"label",
    "dataBinding":{"value":"$phone_number"},
    "styleBinding":{"align":4,"fontSize":28,"fontStyle":1,"gravity":4,"height":80,"lines":1,"marginLeft":86,"textColor":"#3d3f45","width":-1}
    "events":[
        {
            "type":"click",
            "actions":[
                {
                    "type":"userTrack",
                    "param":{"utName":"TelPhone","utParams":{"wp_app":"weapp","wp_m":"phone_7","wp_pk":"$wp_pk"},"utType":"Button"}}
                {
                    "type":"phoneCall",
                    "param":{"phoneNumber":"$phone_number"}
                }
            ]
        }]
}

weapp的想法是很好的,也有很多应用场景,1688早期的roc,就是使用weapp搭建native页面,在后期,很多无线团队也在研究weapp与react-native的融合,但weapp由于是基于json的,因此编写逻辑不灵活,也不方便编写和引用模块,还有很多私有的语法增加了学习成本,落地情况不是很理想,因此在后来react-native出来以后,看到这么耀眼的东西一个存在,基本上就在思考新的方式了。

weex与rax

这个新的思路就是weex,weex吸取了集团在跨端方面的很多沉淀,抛弃了一些缺陷,主要有这么一些优势:

  1. 使用web的方式写代码,通过与vue的结合,深得社区人心,尤其是h5移动页面开发者,学习成本实在太低了,首先解决了一个使用难的问题
  2. 实现了跨三端的高性能渲染,比native要慢,但比react-native要快
  3. 成熟配套的工具支持,weex sdk、weex toolkit、weex playground等,比起react-native,更容易上手
  4. 开放了native dom api,因此上层可以开发自己的js框架,后来的rax就是基于此实现的

我们来看下weex的架构:

在DSL层,使用vue的方式编写界面和交互,打包编译成js bundler自执行文件,js bundle通过url协议被客户端识别,这个过程可通过离线缓存,或者直接请求的方式实现,客户端要执行这个js,那么必须有一个js引擎,目前用的是google v8,js本身是不可能渲染native控件的,因此需要一个jsbridge,jsbridge去callnative实现native控件的生成,不同端的native渲染是不一样的,值得一提的是,如果是web端,那么就不需要jsbridge去callNative了,直接走dom渲染。

weex架构的有一个好处就是,开放了vdom这一层,即操作nativeDom的这一层,这意味着你可以自己手写代码渲染native界面,或者自行封装框架,比如这段代码,即没用vue,也没用jsx,直接手写,也一样能在native运行:

var m = __weex_require__('@weex-module/modal');
m.alert({
    message: "你好吗?"
});
document.open();
var body = document.createBody();

document.documentElement.appendChild(body);
var x = document.createElement("text");
x.attr.value = "hello faxin";
x.style = {
    color: "green",
    fontSize: 100
};
document.body.appendChild(x);
document.close();

//隐藏菊花
sendTasks(document.id, [{module: 'dom', method: 'createFinish', args: []}]);

把这个js放到本地http服务器,然后手机连上公司wifi,用weex的playground扫描即可渲染出结果:

如果没装,可以使用mds模拟,值得一提的是,mds还提供了weex js的断点调试能力,非常推荐:

可以看到,这些api和dom的太像了,事实上,无论是weex jsframework,还是rax,都是对vdom的上层封装而已,有点类似无论是angular、jquery,其实最终都是操作浏览器的dom api来驱动渲染html,在这点上看,我们可以把weex底层看成一个dom level提供者。

接下来再说一下rax,rax是跨容器渲染框架,写法与react基本兼容,rax的前身应该就是react-web,只是现在直接驱动weex容器作为native渲染了,rax的架构有许多值得学习的地方,他的界面写法使用jsx,接下来编译成js,有virtual dom的机制在里面,在最终的渲染端,是通过驱动的机制来实现,也就是说,它能在哪里渲染,取决于你写的驱动,目前在native的渲染,直接对接了weex的native dom api,在web的渲染,使用自己的封装,还有服务器的渲染,你如果后面要写在其他设备的渲染,理论上可以自己编写驱动来实现。

表面上看,rax是提供了另外一种阵营的选择,即vue体系意外的react体系,但它还做了很多事情:

  1. rax ui库,封装了很多集团内的库和组件,如slider、tab、spm打点等等,大部分业务都可以稍微封装即可使用
  2. 兼容的处理,比weex在h5渲染还原度更高
  3. 支持返回一批元素,了解react的同学知道,react必须返回一个带根root的元素

结语

跨三端是多少移动开发人员的梦想,如今在weex体系下已经得到几乎完美的解决,尽管在h5降级上仍有细微的缺陷,目前weex已经捐到了apache基金会,预计未来会得到持续的发展,也欢迎更多的同学加入其研发或者接入。

目录
相关文章
|
移动开发 JavaScript 前端开发
|
3月前
|
移动开发 前端开发 JavaScript
探究移动端混合开发技术:React Native、Weex、Flutter的比较与选择
移动端混合开发技术在移动应用开发领域日益流行,为开发者提供了更高效的跨平台开发方案。本文将比较三种主流混合开发技术:React Native、Weex和Flutter,从性能、生态系统和开发体验等方面进行评估,以帮助开发者在选择适合自己项目的技术时做出明智的决策。
|
3月前
|
移动开发 前端开发 weex
React Native、Weex、Flutter 混合开发技术的比较与选择
移动应用已经成为人们日常生活中不可或缺的一部分,而混合开发技术也随之崛起并逐渐成为主流。本文将比较 React Native、Weex 和 Flutter 三种混合开发技术,并探讨它们各自的优缺点,以及如何根据项目需求做出选择。
54 1
|
3月前
|
移动开发 前端开发 weex
移动端混合开发技术:React Native、Weex、Flutter 之争
在移动应用开发领域,React Native、Weex 和 Flutter 是备受关注的混合开发技术。本文将对它们进行全面比较与评估,以帮助开发者做出明智的选择。我们将从开发生态、性能、跨平台能力和易用性等方面进行比较,为读者提供全面的参考和指导。
|
3月前
|
移动开发 Dart 前端开发
移动端混合开发技术:React Native、Weex、Flutter的比较与选择
移动应用的开发已经成为现代社会中的重要一环。本文将比较并评估三种主流的移动端混合开发技术:React Native、Weex和Flutter。通过对它们的特点、优势和劣势的分析,帮助开发者在选择适合自己项目的技术方案时做出明智的决策。
|
3月前
|
移动开发 开发框架 前端开发
移动端混合开发技术探析:React Native、Weex、Flutter的比较与选择
随着移动应用开发的高速发展,混合开发技术成为了一种备受关注的选择。本文将对移动端混合开发技术中的React Native、Weex和Flutter进行比较与探讨,分析它们在性能、开发体验、生态系统和跨平台支持等方面的差异,以及如何根据项目需求进行选择。
62 1
|
10月前
|
移动开发 前端开发 小程序
|
前端开发 JavaScript 算法
ivx杨帆启航React/Pixi.js/FaaS、Krpano及微服务架构
ivx杨帆启航React/Pixi.js/FaaS、Krpano及微服务架构
264 0
ivx杨帆启航React/Pixi.js/FaaS、Krpano及微服务架构
|
前端开发 rax JavaScript
使用跨端解决方案Rax编写鸿蒙应用
华为的鸿蒙系统自发布以来,便广受关注。它支持 JavaScript 编写应用的特性,对于前端开发者来说意义非凡。跨端解决方案Rax的团队也于8月份开始与HarmonyOS JS UI框架团队合作,旨在支持使用Rax编写HarmonyOS应用。经过几个月的实践之后,他们决定将内部细节的技术实现带到第十六届 D2 的舞台上与大家分享,让我们人手都能开发一款属于自己的 HarmonyOS 应用。
575 0
使用跨端解决方案Rax编写鸿蒙应用
|
移动开发 前端开发 开发工具
react native 友盟统计 IOS 端集成
react native 友盟统计的Android端集成可参考 :https://www.jianshu.com/p/1c41d4b66312 希望大家少走些弯路吧。
2431 0