本文共 2239 字,大约阅读时间需要 7 分钟。
入职阿里的两年时间,有幸一直从事无线动态化解决方案。从最初的WeApp,到现在的Weex,经历了WeApp的从无到有,从“辉煌”到没落,见证了Weex的崛起,在双十一主会场大放光彩。最近,工作方向有所变化,所以从技术角度谈谈个人对无线动态化的理解,同时也算是对我这两年工作的总结。
业务上的变化根本等不及发版解决,这也是出现动态化方案的根本原因。一套优秀的动态化解决方案应该具备:
native动态化主要做的事情是:
...
WeApp是一套基于json作为描述语言的跨平台多终端渲染sdk,孵化于无线卖家的业务中。现在回头来看WeApp,有了更深的体会:
在正确的时间做了恰当的事情,采用私有协议进行描述,快速落地,但是做了一年没有调整方向(没有转换成标准协议,没有彻底解决逻辑动态性),最终没落。究其原因:直到react native的出现才恍然大悟,原来还可以这么玩,把动态性玩的这么彻底,长恭老板的破而后立,这才有了后面的Weex———欲练此功,必先自宫(葵花宝典就是这么练成的)
最后说一句,WeApp是历史时代的产物,它在当时也支撑了很多业务发展,同时也踩过很多坑,积累了大量无线动态化的经验。Weex本身不是新的技术,而是集大家之所长,react native思想和设计(非常关键)、flexbox布局、v8引擎、vue.js和mvvm的思想组成了最终的Weex主体结构。Weex从最初的所有的方案设计都会拿WeApp的痛点作为参考.
Weex native总体架构(以手淘为例)Bundle:包含页面容器,拦截规则,模板缓存等
Weex总体架构图
原理:同步机制原理比较简单,JS Framework一次性创建所有的Dom树,完成渲染。
不足:当进入A(Weex页面)后,快速进入B(Weex页面),A页面没法响应点击操作,返回也不能停止渲染,导致JS Thread 一直渲染脏数据。
适用场景:Native局部使用Weex instance,并且DOM节点较少(不超过100)
原理:采用流式渲染和离屏渲染。
流式渲染:即JS Framework每创建一个节点,立即发送给native,同时等待native的next tick命令的触发才能继续执行,这样就有效的解决了页面回退仍然在渲染,事件不能响应的问题。
离屏渲染:,即用户在浏览页面的过程中,后台Dom线程继续渲染更新页面,将所有addDom、updateSytle等操作都以最小颗粒度拆分,保证所有的操作都在16ms内完成,大大提升首屏的加载性能以及滑动的流畅度。
异步渲染机制(摘自Weex首架@伊耆)踩过的坑:
Weex除了做渲染之外,还可以通过注册Module的方式,执行动态JS逻辑,比如通过JS动态规则下发等逻辑动态性,此处有潜在风险,由于Weex全局只有一个Context,所以最好不要写全局的function,防止影响到Weex相关数据(这个很危险,有可能导致整个Weex不可用,问题还很难查),真要用的话,最好写到某个Object中,如var mapping = Weitao.mapping(){}。
最后,期待@勾股和@鬼道将Weex继续搞大,唱响全球。
Weex总体介绍有技术细节,请参考Weex总架前端大牛@勾股的三篇连载,或者直接骚扰他也行。附上链接
转载地址:http://vjvul.baihongyu.com/