一、相同点
1、 跨平台
2、热更新、热修复
3、响应式视图:采用响应式视图,维护了一个状态机,只更新改变的最小区域界面
4. 调用系统的service仍然需要封装接口,仍然还是需要懂得native开发
4. 提供异化iOS/android组件:对于不同的平台(Android/iOS)提供风格不同的控件,以满足不同平台的设计理念。
5. JIT:
6. 可以单独作为开发框架完成整个App的开发,也可以与现有原生代码相结合实现混合模式的开发。
二、不同点
1、开发语言和框架
React-native: React-native组件+JS+桥接native JavaScript -> react- > React-native
flutter: flutter组件+ dart语法 dart-> flutter
2、渲染方式对比:
1>、H5 + 原生
2>. React-native
3>. flutter
3、编译效果
flutter 支持AOT(预编译) 能够com+s保存当前文件代码立马出现界面效果,当然修改了多个文件代码时(或开发工具卡顿无法便已同步时)需要点击同步按钮进行同步。
RN 支持JIT需要启动一个终端服务,com+s保存代码,立即重编译,服务更新,界面更新
4. 社区热度和第三方库
RN 由facebook 封装的框架,出生比较早,社区活跃,组件丰富
flutter 由谷歌封装的框架,组件日益丰富
5. 上手难度
原生 > H5 + 原生 > RN > flutter
H5 + 原生 和 RN 开发对于前端开发人员更简单
flutter 对于移动端开发人员更容易上手, flutter 语言受众比js 少
RN的界面布局更像网页布局,而Flutter的布局更像native布局
6. 兼容性
Flutter在跨平台这方面做得更彻底一些,Flutter的UI框架性能貌似更高一些,但是直接丢弃了原生UI框架。而RN还是可以自己利用原生框架,两个各有好处。Flutter的兼容性高,RN可以利用原生已有的优秀UI
7. 开发复杂界面的难度
Flutter提供了一种响应式视图,无须JavaScript做桥接;强大的API使得实现复杂的页面效果成为可能;高性能的渲染机制使得120FPS的高频率可以轻而易举的实现。当界面上的图片数量越来越多时,与React Native相比,Flutter的优势会越来越明显。
三、性能测试过程:
分别用Flutter、RN、原生开发三个项目,只有一个列表页面,10000条数据,在三款低中高端机型中测试。
通过性能测试得出下表:
性能测试结论:
通过测试得出的数据结果,仅能从大体上比较出三者的性能,可能在实际的项目中会有些出入。
1、包体积原生比较小,Flutter和RN不相上下(Ios系统需要引入Skia库,最终包体积Flutter会明显大于RN),由于Flutter和RN框架中需要一些C++依赖库,导致包体积比原生大了很多。
2、启动时间,Flutter(冷热启动时间)>RN=原生
3、内存占用,在高端手机上,flutter占用内存是大于RN的,但是低端手机Flutter的内存占用会低于RN,RN内存占用不稳定,页面刚生成的时候内存占用会高一点, 之后缓慢回落。
3、CPU占用,RN明显高于Flutter和原生,这会导致手机性能降低、耗电量增加、发热更厉害
4、主观感受,Flutter要比RN更加流畅,体验感更好,但是和原生仍有不小差距,不过Flutter还很年轻,官方宣称其性能会接近原生,甚至超过原生体验,随着Google不断的改进相信在不远的将来会实现这个可能。
参考文献: