最近在研究 Weex, 遇到不少坑,也看到不少人踩坑,也相信后面会有更多人的继续这个过程。于是乎想写点东西,一来给自己做个总结,二来分享出来,省的浪费大家宝贵的生命财富。

Weex 介绍

首要问题就是 Weex 到底是什么?官方的定义直接看Weex 官网,我就不啰嗦了。有一点要强调:
Weex 和 Hybrid 不能混为一谈(虽然 Weex 支持三端,但我们这里暂不讨论)。虽然 Weex 和 cordova (或者类似的方案或轮子)对开发者来讲,都是通过前端的技术栈来做编写,但
有着本质的区别。

  • JavaScript 的 runtime
    既然都使用 JavaScript,HTML,CSS 来编写,那必然要关心一下 JavaScript 的运行时。对于 Weex 来说,在 Android 设备上使用 V8 引擎,
    在 iOS 上,使用了 JavaScriptCore。而传统的 Hybrid 还是跑在 WebView 里。
  • 页面的渲染
    对于页面的渲染,Weex 在 Android 和 iOS 上都提供了 native 渲染层,也就是为什么 Weex 较 H5 或者 Hybrid 体验更好的原因(之一),而 Hybrid 仍然依赖 WebView 渲染,跟在浏览器运行网页并无二致,因此,不管是兼容性还是用户体验,相对原生应用来说,都逊色。

Weex 和 React Native 有什么区别,抛开 Weex 可以兼容 H5 不谈,其本质上并没有太大区别,只是实现的具体技术方案不同。

原理

凡事要透过现象看本质,除了 What 之外,我们应该更加关注 How,Why 这些话题。来看下 How。
为了能更好的认识 Weex 到底是什么,可以看一下官网对其 工作原理的介绍。

下面这张图是官网工作原理介绍的一张截图,可窥其大概。

不管是 Weex 也好,还是 React Native,都印证了计算机科学家 David Wheeler 的名言:

All problems in computer science can be solved by another level of indirection!

可以这么理解:原本打包好的 H5 资源现在不直接运行在浏览器运行,而是加了 Weex 这一中间层,而对于不同的平台 Weex 做了对应的实现,对于 Android iOS 来说,都是 native APP 的 look and feel, 对于浏览器来说,仍然变成 DOM 结构。

我相信理解了 Weex 的工作原理,能帮助更好的理解 What 这个话题。

Why

说说 Why 这个话题。
容我先讲一个冷笑话:某女择偶的时候讲到她的候选人 Alice 长得很帅,个头又高,而最终选择了王思聪。哈哈,容我先笑两声。虽然 Weex 很好用,三端统一,代码复用率也很高,体验也不错,但很时候决策者还是选择一队人马(Android开发,iOS开发,前端开发)分别来做!

当然实际情况可能很复杂,最终放弃 Weex 可能有很多客观,主观原因,比如:

  1. 团队成员没人懂前端开发
  2. 团队成员不愿意或者没精力学习,试水
  3. 没APP(这个最狠)
  4. 虽然有 APP,但对动态化,体验之类(比如12306?)要求不高
  5. 没有使用场景
  6. 决策层的失误
  7. 爱过,痛过

不嫌我废话多的可以先听我分析一波:对于 1 & 2, 不仅是个人问题,团队文化也有待提高。对于 3 不谈。对于 4 ,市面上任何一款 APP 或多或少都有对体验,动态化这些方面的需求,如果真的没有的话,那也蛮奇葩的。对于 5,肯定有,不谈。对于 6,蛮遗憾的,可以考虑换个领导了。对于 7,可能在一些不适合的业务场景用过,姿势不正确,最终放弃,这个也蛮遗憾。

回到 Why 这个话题。如果纯粹是为了用新技术,那意义不大。但是,但凡有点追求的团队,对效率应该都有所追求,比如 CI, CD ,自动化运维等都是为了解放人力,追求更好的效率。对于 Weex 来说,虽然没有自动化,但是确实可以提高代码复用率,提高团队整体效率,原本一款 APP 可能需要 Android 和 iOS 开发各两名,而现在,只留一名就够了,如果有 m 站,那更好了,这样解放出来的开发可以不再忙于业务,有时间考虑提高 APP 体验,性能,写写 UT,或者做一些自动化,监控相关的研发。

假设一开始能认识到效率 这个关键点,再看上面那些原因,你能发现什么?

Weex or React Native

以下论述仅代表个人意见。

用 React Native 写过几个 APP。就当前开发者体验来讲,Weex 比较浪费生命,因为问题比较多(在快速发展嘛,这也是我准备分享 Weex 相关话题的原因)。但是把目光放得长远一点,我更加喜欢 Weex ,因为 Weex 更遵循 W3C 标准,支出三端,灵活的 JsBundle 切分加载机制…

最后

先打一波广告,我整理了一份 weex 相关的资料,这份资料会尽量保持同 Weex 一起更新(现在很多教程,repo 其实都过时了,也 run 不起来,如果刚入坑 Weex, 我这份还算靠谱),也希望大家一起贡献自己的力量。

预告:下篇开始不吹水,写代码!