渐渐远去的 Hybrid 技术

2,818 阅读5分钟
原文链接: mp.weixin.qq.com


周五的时候,边上班干活,边听weex conf的直播,看来weex的野心很大啊,不仅发布了Rax来拉拢React开发者,正式宣布打通了Vue的生态,还发布了weex 市场,这是要玩一套移动解决方案的生态,上游下游都有人陪它一起玩,把这个生态撑起来,想象一下,未来weex要是市场里的插件足够丰富,或许很多人都会因此发家致富也未可知。


这一场分享听下来,受益良多。


眼下,weex 还是有很多问题需要解决,比如:


weex 目前支持的标签非常少量,而未来也可能通过Component的方式来支持h1等。why? 因为 weex 提供了一套非常基础的能力,我们可以通过这些基础能力来组合出我们自己想要的标签,比如h1,你可以使用<div><text style="">{{ value }}</text></div>,Text+样式的方式来组合,又比如checkbox,可以用 image + Text 的方式来组合成你想要的checkbox。想一想,是不是很有趣?看来这也是一个造轮子的好方向,这意味着如果将来weex团队自己不出一套官方的标签Component的话,那么开源社区就有事情可做了,这可是一个“骗”star的绝佳时机。


如何优化Native性能,其实说的就是如何优化Cell(List),以及控制层级结构数量。我们都知道,iOS中的UITableView是有缓存机制的,一个Cell,可以在滚动出可视区域后,从队列中取缓存的对象来重新设置而已。复用,有很多种方式,而这样的优化方式,可谓是做到了极致。而weex带来了非常类似的方式,去优化List组件。


那么,对于我们而言,上述都还不是最重要的。业务开发最重要的是什么?是开发环境,是调试环境,是工具链。感谢 weex 团队,给我们提供了一套比较好的工具链,这才是跟业务开发息息相关的东西,想象一下,如果没有debug,都要靠打日志的方式去调试,这是件多么痛苦的事情。如果没有inspect你去检查界面,虽然发现了元素偏移了,却很难查看坐标系,这也是件很痛苦的事情。


回过头来,我们为什么要使用“Hybrid”的方式?


其实根本性的目的就是为了“热更新”,“降低开发难度和学习成本”。我们知道使用Native技术开发的App是需要发布到应用市场的,而应用市场都是有一定的审核周期的,哪怕Android也需要个一两天,而iOS就更久了。如果中间,某些地方出现了bug,或者要发布新版本也是需要等待很长的时间,如果想在某些节日时动态改变UI,那么就更难实现了。于是,就有很多人在研究如何从服务端去下发代码,让App可以动态的运行。最开始,大家研究的还是如何通过加载动态库的方式,后来Apple不干了,一纸命令,“谁在这么干,就干死谁”,后来大家找了一圈,发现Web前端技术不正好就可以干这个事儿么?于是,最先出现的PhoneGap给了大家很好的启发,原来还可以这么干,于是大家就先后去研究这方面的知识。


真的,前几年你要是说你会Hybrid技术,是很牛逼的,Why?因为这门技术真正需要的是跨背景领域知识的融合,只会一端很难窥其全境,这还是有一定门槛的。后来大家搞出来了很多成熟的方案,于是大家也就习以为常了。当然了,技术在发展,特别是V8,JS Core的出现,给大家又提供了另外一个解决方案,JS To Native。Facebook最先在实践领域把这一项玩的相当溜,这还是要感谢React这种组件化的库,当一个达到组件这种抽象的级别时,对于映射不同的终端,实际上是很好衔接的。React Native的出现,算是将这门技术推向了比较巅峰的高度,社区,也开始放慢了探索的脚步。


前些日子微信推出的小程序,对于安卓来说它是一个独立的Task,这也意味着进程的独立。对于iOS而言就没有这么独立了,但是通过一定的技术手段,发现其页面还是运行在WebView上的网页?当时,我就纳尼了很久?难道是微信缺人手?后来经过仔细的思考,通过一定的技术分析,当然这些都是猜测。微信在iOS上目前已经升级到了WKWebView,而Android也是使用的内部的内核。为了让小程序得到较好的体验,又可以在未来更新Runtime的方式去优化小程序,于是它有一定程度上限制了开发者的开发能力,当然微信的体量足够强大,大家不得不陪着它玩。封闭是可以为小程序带来更好的体验,Why?因为开发者不能什么代码都写,一切的规则都会有微信来提供。而业务JS代码,运行在JS Core引擎中,虽然最终在WebView中渲染呈现,但依然是不能访问浏览器提供的能力的,比如window,document等。


有一些感慨,感觉Hybrid技术,有一丝丝的在渐渐远去了。但混合技术的实践,将在各个领域向前发展,并永存。


历史,就是如此,车轮滚滚向前,这一路我们走来,想想前人在IE下工作的场景,再想想眼下我们使用的技术,以及社区给我们提供的东西,实在是幸福很多了。


岁月虽然不会带走一串串熟悉的姓名,但却留下了足够让我们致敬的痕迹。