背景:
前段时间在一家上市的房地产公司从事相关区块链方面的工作,由于前期公司想做ICO(发布虚拟货币),但后期国家明令禁止做ICO ,没办法,只能中途转型,往IPO(上市)这条路上走,后面用户一直上不来,去年年底一波大潮,我们整个团队被公司裁员了。
今年年初,也就是19年,我开始找工作,发现一个很奇怪的问题,很多公司的要求会RN(weex倒是很少),因为我之前写过weex相关的代码,RN 上手应该也不难。但还有不少公司的招聘要求上明确要求掌握flutter,那时候的我还不了解flutter是什么,后面去网上简单了解了一下,flutter也是一套跨平台的方案,说是比RN 要更加高效一些。因为当时没有接触过,又要找工作,就没去详细了解flutter。
跨平台方案
最近这段时间比较闲,正好公司的项目也用到了RN ,我就系统学习了一些RN ,写了一个demo,顺便维护公司的代码。这样算起来,跨平台的方案,我就已经接触了两套了,虽说weex是在RN 的基础上,改了点东西,但也有自己一定的社区和生态。于是,我就想去详细了解一下flutter,看看这个由Google推出的跨平台方案成为一些公司选择的原因。
flutter
Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。
Flutter可以与现有的代码一起工作,并且Flutter是完全免费、开源的。
Flutter 是由 Google 的工程师团队打造的,用于创建高性能、跨平台的移动应用的框架。
Flutter 针对当下以及未来的移动设备进行优化,专注于 Android and iOS 低延迟的输入和高帧率
Flutter的设计跟react-native很像,但是比RN进了一步
Flutter的开发语言是Dart
Flutter将UI组件和渲染器从平台移动到应用程序中,这使得它们可以自定义和可扩展。Flutter唯一要求系统提供的是canvas,以便定制的UI组件可以出现在设备的屏幕上,以及访问事件(触摸,定时器等)和服务(位置、相机等)。这是Flutter可以做到跨平台而且高效的关键。另外Flutter学习了RN的UI编程方式,引入了状态机,更新UI时只更新最小改变区域。
系统的UI框架可以取代,但是系统提供的一些服务是无法取代的。Flutter在跟系统service通信方式,采用的是一种类似插件式的方式,或者有点像远程过程调用RPC方式。这种方式据说也要比RN的桥接方式高效。
flutter 和 RN
Flutter性能会更好无线接近原生的体验,Dart是AOT编译的,编译成快速、可预测的本地代码
RN采用JS语言开发,基于React,对前端工程师更友好。Dart语言受众小
Flutter自己实现了一套UI框架,丢弃了原生的UI框架。而RN还是可以自己利用原生框架,两个各有好处。Flutter的兼容性高,RN可以利用原生已有的优秀UI
RN的布局更像css,而Flutter的布局更像native布局,但是去掉xml通过代码直接写需要适应下
Flutter的第三方库还很少,RN发展的早,虽然也还不完善,Flutter github还有3000多个issues要解决,还有很长的路要走。
横向发展改如何选择
作为一名iOS开发人员,我从2016年开始接触一个所谓的‘大前端’的概念,似乎三端统一是移动端最终的未来,但随着这三年的开发经验,慢慢的我发现,过度的横向发展,会导致自己止步不前,从南京跳槽到上海的第一家公司,就是因为他们可以提供给我学习weex的机会,后面发现有许多趟不过去的坑之后,还是选择用WKWebview去做Hybrid方案。再到后面接触RN,发现有些性能问题和一些复杂的交互和动画,还是得去用Native去实现。原本从技术选型上来说,选择跨平台的方案,肯定是出于节省人力成本资源,但最后往往会发现,不但不能减少人力成本,极有可能埋下一些不可预知的风险。
即使是上面的这种情况,很多公司的招聘要求还是明确的写着flutter这样的要求,(RN出来的算比较早的,一些常见的坑差不多都已经趟过去了)我有些不大明白,难道他们公司的商业应用不需要考虑到线上的一些风险,还是他们真的有能力去及时解决线上可能出现的重大问题。虽说我们不能因噎废食,但如果公司商业应用的体量开始慢慢变得庞大的时候,有些坑趟不过去,是够人喝一壶的了。
看一下flutter目前的生态和社区,我们都知道,很多开发者在做编程选择的时候,社区和生态是考虑的重要标准。
生态:
在Flutter官方的Pub平台上,纯Flutter Package大概有两千多个,基本上常见的库还是都有的,例如网络、图片、音视频播放等等。但是对于目前Android以及iOS的生态,还是远远的不足的,对于一些复杂的UI或者一些不是特别通用的功能,就得自己去实现。
社区很多人反映,真机上运行很卡顿。因为我没有自己去写个demo运行,所以这句话我也不能很确定,单从flutter的渲染机制和他们官方的测试数据来说,应该不存在这样的情况,可能是一些人因为一些坑,导致失分卡顿,但却无力解决。
总结:
RN也好,Flutter也好,对于新技术我们可以去学习,但我个人觉得,还是应该去纵向发展,往深处扎根,因为你的精力是有限的,随着年龄的增长,我们的学习能力在不断下降,往深处扎根的同时,保持对新技术的了解。就像树的根须一样,只有这样才能深深的扎进土里。
网友评论