能熟练使用vue

以前用过weex,能直接上手,比较倾向。但是这不是个有说服力的理由。而且好像已经不维护了。

flutter看著和java有点像。有点java基础。感觉可以尝试。

rn:挺火的。但是facebook好像自己都不用了。

怎么选呐?

我都可以学可以用。都火,也都有坑。怎么选呐?

怎么说出有个说服力的理由?专业的理由?


每种解决方案都有他的应用场景,关键看你要干什么事情,如果单纯学习而不是满足业务,那么优先 flutter 好了


我之前写过一篇文章,讲解我编程多年使用过的那些跨平台技术,你说的这几个还是最近几年的跨平台技术。从早期的Cordova到现在的Flutter,从SmartTV到Android、iOS、MacOS以及Windows(还有死去的Windows Phone,我可爱的Lumia 720只能变成老年机了)。从事编程那些年经历的跨平台开发工具框架包括:Cordova,Xamarin,Titanium,NativeScript,React Native,Electron,uni-app,Flutter,我做了一个详细的来龙去脉的分析以及优缺点对比,花了一个通宵整理的。

我在这里只挑选部分做一个说明:

React Native(底层使用React)

小弟算是第一批把React Native用在生产环境上的人(当时是0.0.3版,第一个public版,想想我当时胆子还真大)。

ReactNative没有像NativeScript一样做反射,而是建构了一组RCTBridge,用来做js跟native之间的交互,要使用native API或native 组件的话都要在native层做桥接,然后导入到js里面(类似你写Node的C++ addon的感觉)。

优点:

  • 1.ReactNative能有今天的反响,很大一部分是得利于React生态圈的整体发展优势,以及有Facebook已经在他们的app上做过产品实践,这对很多人而言是一剂强心针,再加上诸如Airbnb,Uber等大型公司也纷纷采用,更造成了推波助澜的效果。
  • 2.打出来的包会比NativeScript的小,架构实现上也比较单纯。因为ReactNative没有像NativeScript一样做反射,而是建构了一组RCTBridge,用来做js跟native之间的交互,所以打出来的包会比NativeScript的小,架构实现上也比较单纯。
  • 3.ReactNative当初出现时打的口号是「learn once, write everywhere」,让不同平台上保有不同的平台特性。这个中心思想所带来的架构设计,让ReactNative可以很轻易的扩展到其他平台上,例如第三方开发者实现的react-native-macos、react-native-appletv(后来被整合进官方里)、微软官方开发的react-native-windows(原名是uwp)、Samsung官方的react-native-tizen,几乎可以说所有平台上都可以看到ReactNative的影子,具体是否成熟有待研究。

缺点:

  • 1.ReactNative目前其实还不算是在一个稳定的状态,他们每两周都会更新一次,这也是开发时要注意的一点。
  • 2.你必须拥有native platform相关的知识。应该说,自从Cordova之后的主流跨平台方案都会要求要具备一定程度的平台原生相关知识。虽然说比起NativeScript,ReactNative在没有任何的原生知识的情况下也是可以编译打包生成一个可用的app,但是这会大大的限缩了你的可扩展性,而且在不了解原生的渲染以及运作方式的情况下,可能会不小心让CPU发烫成了定时炸弹。
  • 3.每个native module都要自己桥接一次,非常麻烦。
  • 4.性能差,卡顿严重,远比不上native应用性能。

Weex(底层使用Vue)

weex资料太少了,我就不做介绍了,反正我是踩过坑的,后来放弃weex了,文档不齐全,API缺少,扩展功能不完善,性能也好不到哪里。。。


Flutter

Flutter是谷歌推出的一个全新的高性能高一致性的跨平台的开发框架。

【优点:】

  • 1.你只需要使用Dart语言写一套代码,即可自动编译到各个平台,目前支持Android,iOS,Web(Beta),Desktop(Alpha),当然也有Windows PC和linux平台的兼容支持官方正在研发中。所以你完全不用担心框架内部是如何帮你实现的。你只需要一个命令行就可以在对应平台运行你的代码了,比如:flutter run xxx,这里的xxx指的是你的平台设备名称,比如「flutter run chrome"表示将程序运行在浏览器上面。
  • 2.独立的Skia渲染引擎,高性能高一致性。你的代码编译出来的程序可以达到60bps的高性能。
  • 3.丰富的组件支持,你完全可以按照你的想法去做,扩展性非常强大,MD风格的,以及ios风格的组件都有,足够满足平时开发需求。而且Flutter基于react以及flex的思想进行布局。
  • 4.丰富的社区支持。目前常用的组件以及一些第三方包都有大佬开源出来了,足够应对平时的开发了。如果你不清楚的话,也没关系,我特意收集了Flutter工具集合,这里面啥都有,足够让你可以快速找到你要的东西,你可以点进来看看:AweiLoveAndroid/Flutter-learning
  • 5.开源免费的。你可以随意修改内核引擎代码,以及组件代码,定制化的开发,比如闲鱼,腾讯,位元组跳动等大厂都基于Flutter进行针对他们的App开发做了定制化的整合方案,当然你要是感兴趣的话,你也可以这么做。
  • 6.使用Dart语言进行开发。Dart语法很像JS+Java+Swift+Kotlin+C#+TypeScript+JavaScript+PHP,虽然表面上没有使用web开发,但是你完全不用担心,你仍然可以进行开发,只是语言写法不一样,但是这里面很多都是熟悉的东西,基本上上手成本也是很低的。

【缺点:】

如果不熟悉原生开发,第三方包满足不了你的需求的时候,那么就需要你自己去写或修改已有的插件,这个需要学习一点原生开发的知识(其实这也是很多跨平台技术必不可少的步骤),当然如果你们公司有android或ios的程序员,可以让他们协助写一个插件,这对于他们来说都是小问题。

详情可以看我写的文章:

AWeiLoveAndroid:从事编程那些年经历的跨平台开发工具框架演变历史?

zhuanlan.zhihu.com图标

RN、Weex采用的技术方案大体相同,它们都使用JavaScript作为编程语言,然后通过中间层转换为原生的组件后再利用Native渲染引擎执行渲染操作。而Flutter直接使用skia来渲染视图,而Flutter Widget则使用现代响应式框架来构建,和平台没有直接的关系。就目前跨平台技术来看,JavaScript在跨平台开发中可谓占据半壁江山,大有「一统天下」的趋势。

从性能方面来说,Flutter的性能理论上是最好的,RN和Weex次之,并且都好于传统的WebView方案。但从目前的实际应用来看却并没有太大的差距,特别是和0.5.0版本以上的RN对比性能体验上差异并不明显。

总的来说,Flutter最好,RN次之,但是还有很多老项目在用,再说一句,这几个技术我都写了书,可以京东去找,希望对你有所帮助


对比过好些个跨平台,得出结论:

便利和性能总是不可协调

便利的如weex和rn,思路差不多,js框架不同,且weex技术支持远比不上rn

(更便利的uniapp,内置weex,好像什么都能打,但性能牺牲更大)

性能好的如Flutter,语言和引擎都是自己搞的,性能吹得很牛逼,但写起来一层套一层,还对布局规则作出很多限制,适合特定使用场景

(性能怎么都比不上原生Native)

后面又找,发现一个跨平台框架排名网站:

https://www.cyanhall.com/cn/top/cross-platform-framework/?

www.cyanhall.com

找到了排第六的Quasar Framework,github介绍如下:

Build high-performance VueJS user interfaces in record time: responsive Single Page Apps, SSR Apps, PWAs, Browser extensions, Hybrid Mobile Apps and Electron Apps. If you want, all using the same codebase!

翻译:在纪录时间内构建高性能的VueJS用户界面:响应式单页应用,服务端渲染应用,谷歌小程序,浏览器插件,混合移动端应用,桌面级应用

总结:框架采用Vue,集成了Cordova(安卓和ios开发)、inoic Capacitor(更现代的Cordova替代方案)和Electron(电脑桌面端开发),提供Material风格的UI

比起学习成本更高的RN和Flutter,这个性价比对答主来说是不错的

另外总结了一份跨平台方案的思维导图:(更多前端导图总结,公号后台回「前端思维导图」,会保持更新,by 【链接船】)


公司用RN,自己用flutter,准备学swift


我理解这个问题应该是:学哪个又更好的职业发展机会。

我的答案是:不要纠结,技术是为业务服务的,不要拘泥于技术站队。业务总是要求交付效率提升,跨端技术是必走之路。人才市场的需求是一直存在并且旺盛的。了解一种,或是多种跨端技术只是个人竞争力的多少的问题

  • 熟悉 Web 技术的同学可以从 weex 和 RN 入门,逐步了解移动端原生开发技术,学习曲线平滑。
  • 熟悉 Mobile 技术的同学可以从 Flutter 入门。

我是先学习的 RN,之后学习了 Flutter。推荐一下我的 Flutter 学习经历整理:

弗兰克:两天时间,用 Flutter 写出一个股票分析客户端?

zhuanlan.zhihu.com图标

我用过rn开发过实际项目。

简单入门过flutter,感觉也还行。

但如果你之前是前端,感觉还是rn好点,虽然各种人吐槽,但是常规业务来说,rn的开发速度,真的不要太快。


专业iOS 开发,目前从原生转到Flutter开发,公司项目


推荐阅读:
相关文章