最近开发一个新项目,在考虑技术选型,现有uni-app,Taro,RN,flutter,客观比较一下
uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。uni-app在手,做啥都不愁。即使不跨端,uni-app也是更好的小程序开发框架、更好的App跨平台框架、更方便的H5开发框架。不管领导安排什么样的项目,你都可以快速交付,不需要转换开发思维、不需要更改开发习惯。
uni-app功能框架图可看出,uni-app在跨平台的过程中,不牺牲平台特色,可优雅的调用平台专有能力,真正做到海纳百川、各取所长。本人使用uni-app也有2年了。
Taro 是一个开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发 微信 / 京东 / 百度 / 支付宝 / 字节跳动 / QQ 小程序 / H5 等应用。现如今市面上端的形态多种多样,Web、React Native、微信小程序等各种端大行其道,当业务要求同时在不同的端都要求有所表现的时候,针对不同的端去编写多套代码的成本显然非常高,这时候只编写一套代码就能够适配到多端的能力就显得极为需要。
react native将原生开发的最佳部分与 React 相结合, 致力于成为构建用户界面的顶尖 JavaScript 框架。是一套 UI 框架,默认情况下 React Native 会在 Activity 下加载 JS 文件,然后运行在 JavaScriptCore 中解析 Bundle 文件布局,最终堆叠出一系列的原生控件进行渲染。简单来说就是 通过写 JS 代码配置页面布局,然后 React Native 最终会解析渲染成原生控件,如 标签对应 ViewGroup/UIView , 标签对应 ScrollView/UIScrollView , 标签对应 ImageView/UIImageView 等,让页面的性能能得到进一步的提升。在页面布局上的每一次操作都会通过中间桥链接与原生native双向通信,在编写格式上,在界面开发上延续了 React 的开发风格,支持 scss/sass 、样式代码分离,支持 React Hook 函数式编程。
Flutter是一款移动应用程序SDK,是一个UI框架,一份代码可以同时生成iOS和Android两个高性能、高保真的应用程序。目标是使开发人员能够交付在不同平台上都感觉自然流畅的高性能应用程序。我们兼容滚动行为、排版、图标等方面的差异。
可以帮助我们:提高开发效率,同一份代码开发iOS和Android,减少代码量,减少开发成本,轻松迭代;创建美观,高度定制的用户体验。Flutter包括一个现代的响应式框架、一个2D渲染引擎Skia、现成的widget和开发工具。这些组件可以帮助您快速地设计、构建、测试和调试应用程序。一切皆为组件widget,开发中一般是通过继承 无状态 StatelessWidget 控件或者 有状态 StatefulWidget 控件 来实现页面。
总结
uni-app 容易上手,如果应用比较不复杂,可以选用这个。如果只是单纯的做小程序,选用taro比较好,编程风格我比较喜欢,转化成H5 API要处理一些兼容性问题。uni-app转化Android和iOS性能方面不如RN和flutter,使用手机应用时都要通过专门的渠道调原生native,RN的每次操作都要和原生native通信交互,flutter是自绘UI,速度和性能比RN更接近原生,flutter 使用Dart语言。包体积原生比较,Flutter和RN不相上下(iOS系统需要引入Skia库,最终包体积Flutter会明显大于RN),由于Flutter和RN框架中需要一些C++依赖库,导致包体积比原生大了很多。Flutter要比RN更加流畅一些,体验感更好。总之每个框架都有相应的优缺点,要根据实际业务和开发团队去选型。