iOS程序员面试笔试真题与解析
上QQ阅读APP看书,第一时间看更新

面试技巧13 React Native和Weex重要吗?

在传统开发中,当需要开发一款App的时候,往往需要在各个平台上,例如安卓平台、iOS平台和Web平台,都开发一款对应的App,我们将其称这为“原生开发”。“原生开发”会给开发带来许多的问题,首先是开发人员增多和开发成本增加的问题,每个平台都需要有一名开发人员,而每增加一名开发人员就提高了开发成本;其次是还要保证不同平台之间功能的一致性,这也给测试人员也带来了更多工作量;而最大的问题在于“原生开发”的周期长、复杂度高,这往往会造成产品难以在预期时间内完成。为了解决这种高成本的“原生开发”问题,两种代替原生开发的新技术诞生了——React Native和Weex。

什么是React Native开发?

React Native是Facebook在2015年3月开源的一个跨平台UI框架,其理念是既拥有“原生开发”的用户体验,又保留React(React是Facebook 2013年开源的Web开发框架)的开发效率,这无疑击中了业界的痛点。它的设计者Occhino不强求写一份React Native代码来同时支持多个应用平台,而是希望在不同的平台上通过编写React Native代码来支持各个平台,因此他提出了“Learn once,write anywhere”口号,并没有像Java设计的那样“wirte once,run anywhere”。React Native底层的实现其实依赖于Javascript,通过Javascript引擎来调用原生代码,从而实现页面的渲染和数据的绑定。React Native不仅解决了跨平台问题,还解决了客户端动态更新困难的问题。React Natice使用热更新方式来做到动态更新应用,解决了客户端更新麻烦的问题,特别是iOS端,每次更新都需要重新发布一个版本。React Native通过将基础模块和业务模块一起打包成一个JS Bundle(JavaScript资源包),然后将这个JS Bundle放到服务器上,客户端通过下载服务器上的JS Bundle来实现更新,避免了重新发布应用。在业务频繁变化的情况下,动态更新就变得非常有用。图1是React Native的设计框架。

图1 React Native的设计框架

什么是Weex开发?

Weex是阿里巴巴在2016年6月开源的一种用于构建跨平台应用的UI框架,其设计理念是希望客户端在具备动态发布能力的同时又不失良好的性能和用户体验。区别于React Native,为了彻底解决平台多样性带来的问题,Weex大胆地提出了“write once,run everywhere”的口号,即写一份Weex代码可以在不同的平台上运行,它比React Native做得更彻底,更具革命性。Weex又被称为Vue Native,原因在于Weex是基于Vue来编写的,Vue是目前非常火的前端框架,它比React要简单、易用。Vue使得Weex的开发也更加简单,让更多的人能够快速上手,这也更迎合大众的口味。Weex也是通过Javascript引擎来调用原生代码实现页面的渲染和数据的绑定。和React Native一样,Weex也是将代码打包成JS Bundle放到服务器上,客户端从服务器上下载JS Bundle来实现动态更新。不同的是Weex只打包业务模块,基础模块则留在了客户端的Weex SDK中,因此打包后的JS Bundle体积非常小,更加便于更新。图2是Weex的框架图。

图2 Weex框架图

React Native和Weex如何选择?

React Native和Weex的相同之处是都是基于Javascript渲染的,而React Native选择使用React编写前端界面,Weex使用Vue编写前端界面。React Native和Weex都能实现跨平台开发应用,从性能上来看,两者几乎一样,因为都是通过Javascript调用原生的代码实现页面渲染,而Weex比React Native更加容易学习和使用,编写一份代码即可在多个平台上运行,还能够实现增量更新,这些是Weex的优势;而React Native的优势在于拥有更活跃的开源社区,版本迭代更快,遇到的问题能够更快得到解决。React Native和Weex的共同的缺点是对原生组件的支持不够完善,许多原生组件的功能无法使用;自定义能力差,例如,很难实现自定义跳转效果;很难同时良好地支持各个平台,兼容性不够好;用户体验不够友好等。至于选择哪个框架或方案更好,这个很难说,因为这两个框架都还有很大的提升空间,我相信这种技术会是未来App开发的一个重要方向。没有最好的选择,只有更适合的选择,选择符合当前业务的方案才是最好的选择。