跨平台技术选型

React-Native的优势

  • 某些方面上开发效率高 在某些方面React Native开发效率比原生效率高,这里指的是开发效率,因为HotReload的关系,因此在开发React Native的时候基本上不用重新编译整个工程,这一点我认为对开发者的开发体验来说是非常棒的,在这里我指的是某些方面,当然什么方面来说的话后面会详细的进行展开。

  • 复杂的布局也能得心应手。 Flex布局针对于复杂页面的布局很有优势,由于之前是做安卓开发,比如安卓在开发流式布局或者自定义多样化的布局上需要进行自定义View,如果考虑性能可能还需要进行使用RecyclerView进行多布局。因此结合css position属性 + flex可以轻松应对大多数场景了。

  • 开发效率快。 由于js是弱类型语言,在ReactNative中使用了基于es6的语法,因此可以大大提高了js面向对象的编程的能力。而且语法糖丰富,第三方扩展多,使用npm基本上什么库都能够找到你想要的第三方库

  • learn once write everywhere!! 这里的优势确实还是有的,由于之前确实学习过一段时间的React,对于React的这套体系(更改State驱动界面更新,Props可以用来跨组件传值等等)这些在React编程的思路确实是没有变化的,因此前端对于转来学习React Native应该是问题不大的。

  • 跨平台 这一点恐怕是选择React Native的一个非常重要的原因。

    1
    2
    3
    4
    5
    6
    7
    --------------js--------------
    ||
    \/
    ----------js runtime----------
    || /\
    \/ ||
    ------Android/IOS render------

React-Native不足

  • React Native更新太快 通常我们说软件更新快是一件好事情,但是对于咱们开发React Native来说的话确实有点….(学不动.png),更新太快会有一些库的兼容问题,因此很可能半年之前写的项目不能很好的运行在最新的React Native的版本之上。(相信React Native后面能够稳定下来)

  • 第三方库的质量问题 本着不重复造轮子的原则,我们一般都会或多或少的引入第三方库。对于React Native来说的话确实优秀的第三方库太少了,一般很难满足自己的需求,因此只能读其代码进行定制化的改造。这一点也确实是由于精通Android 和ios以及Rn的开发者比较少,很少能够进行全面的编写完美的跨平台组件。(基于稳定下来之后,我想这个问题也能够得到充分的解决)

  • React Native稀奇古怪的问题还是不少 这一点上主要在于刚刚接触React Native的时候对于语法以及开发项目的不理解时导致的问题挺多的。(没办法只能说坑踩的多了,你就是大佬了)

  • 成也js败也js 这一点只能代表我个人观点,js的动态能力很强,在代码的编写上可以说是每一个人都有心中自己的最佳实践。(当然了客观上我们还是需要多学习像airbnb等这些大公司编写的优秀的代码)在js中,当我们要调用别人的库的时候我们只能够进行查找文档或者找到对应的博客进行学习。对于我这种从java转过来的编程者更倾向于希望阅读代码的api注释以及传入参数的限制等等,这样的话对于开发效率的提升也是不小的,而且可以更快的上手。(不过对于js这种动态类型来说,TypeScript(它不是一个库,应该说是js的另外一种生态了)、Flow这种可以帮助js进行类型检查的库或者生态能够更好的解决这个问题了)

Weex OR Flutter

  • Weex是阿里巴巴基于React-Native的灵感从而产生的项目,Weex利用了v8来作为js runtime并且使用vue作为开发框架,这对于vue的使用者来说是一个很好的消息。

  • Flutter是Google推出的一个跨平台框架,使用Skia作为绘制引擎。由于IOS并无内置该代码,因此IOS安装体积会比安卓大。与RN和Weex不同,Flutter并不是通过解析js代码转换Native代码渲染而是相当于使用了一个Canvas使用Skia进行绘制,由于RN目前已知的一些问题我认为Flutter可能是未来跨平台的一种重要的解决方案。