Flutter调研结果

1:原生开发与跨平台技术对比

1.1 原生开发

原生应用程序是指某一个移动平台(比如iOS或安卓)所特有的应用,使用相应平台支持的开发工具和语言,并直接调用系统提供的SDK API,原生开发有以下主要优势:

  • 可访问平台全部功能(GPS、摄像头);
  • 速度快、性能高、可以实现复杂动画及绘制,整体用户体验好;

主要缺点:

  • 平台特定,开发成本高;不同平台必须维护不同代码,人力成本随之变大;
  • 内容固定,动态化弱,大多数情况下,有新功能更新时只能发版;

1.2 跨平台技术简介

针对原生开发面临问题,跨平台技术应运而生,根据其原理,主要分为三类:

  • H5+原生(Cordova、Ionic、微信小程序)
  • JavaScript开发+原生渲染 (React Native、Weex、快应用)
  • 自绘UI+原生(QT for mobile、Flutter)

下面主要说一下第三种(自绘UI+原生)跨平台技术方案(其他方案介绍请查看移动技术简介 )这种技术的思路是,通过在不同平台实现一个统一接口的渲染引擎来绘制UI,而不依赖系统原生控件,所以可以做到不同平台UI的一致性。注意,自绘引擎解决的是UI的跨平台问题,如果涉及其它系统能力调用,依然要涉及原生开发基于此目前Flutter的优缺点如下:

主要优点

  • 性能高;由于自绘引擎是直接调用系统API来绘制UI,所以性能和原生控件接近。
  • 灵活、组件库易维护、UI外观保真度和一致性高;由于UI渲染不依赖原生控件,也就不需要根据不同平台的控件单独维护一套组件库,所以代码容易维护。
  • 开发效率:Flutter的热重载可帮助开发者快速地进行测试、构建UI、添加功能并更快地修复错误。在iOS和Android模拟器或真机上可以实现毫秒级热重载,并且不会丢失状态。

主要缺点

  • 动态性不足;为了保证UI绘制性能,自绘UI系统一般都会采用AOT模式编译其发布包,所以应用发布后,不能像Hybrid和RN那些使用JavaScript(JIT)作为开发语言的框架那样动态下发代码。
  • 现阶段APP启动速度低于原生APP,因为Appqi因存在Flutter运行时环境的初始化过程
  • 特定功能性能略低于Native:混合栈或部分功能需要基于Native来实现
  • Flutter不支持直接操作摄像机、GPS等硬件以及平台相关的一些服务

针对移动端的系统底层的一些服务以及硬件相关的操作,目前有两种方案:

1: flutter官方插件管理平台pub提供了一些基础的插件开发者使用.这些插件的基本原理是内部封装iOS和android端的原生API,对上层调用者提供统一的dart接口(例如:操作摄像头的camera 插件,用于本地文件存储的shared_preferences 插件)。

2:开发者自己开发一些插件供Flutter调用(需要对两端系统sdk都比较了解)

  • Flutter安装包比原生安装包大很多(主要是工程包含flutter SDK ,并且flutter不支持bitCode)。
  • Flutter内存占用比较大详见闲鱼技术团队对Android Flutter内存初探文章

2:Flutter应用概况

2.1.国内使用Flutter的主流应用

  • o闲鱼:混合栈模式,宝贝详情页等10+页面采用了Flutter

    闲鱼技术团队Flutter技术博客

  • o京东金融:混合栈模式

  • o腾讯Now直播:仅iOS

2.2.国外使用Flutter的主流应用

  • oGoogle Ads
  • oHamilton Musical
  • oAbbey Road Studios
  • oReflectly
  • oAppTree:仅Android

2.3.Flutter社区App列表

Flutter社区App列表
这个社区收集了热度较高的Flutter App数据,总数为346个,其中92个为开源项目

2.4.GitHub的Flutter项目列表

GitHub的Flutter项目列表
GitHub上flutter相关的项目有23,323个,其中分布于各平台的特性插件大致有5K+,Android的有400+

总结:
经过调研我认为,Flutter确实解决了UI的跨平台问题,UI层面性能接近原生,目前确实发展十分迅速,但是生态远远没到成熟的地步,这对于资源有限的应用开发团队来说是很致命的,且现在在开发调试上还是有些痛苦的,比如无法准确定位错误堆栈等。

你可能感兴趣的:(Flutter调研结果)