新项目要求重新选择一个移动端框架,查了些资料做分析。
开发模式当前app主流开发模式有
Native App(原生)
Web App (网页)
Hybrid App(混合)
这个图说的还是很清楚的
总结一下:
混合开发灵活性好,兼容性强,功能更完备,所以当前项目考虑使用 混合开发模式。
Hybrid App混合开发
关于混合开发,下面几篇文章说的还是比较清楚的。
混合应用开发定义和常见问题:
https://blog.csdn.net/bihansheng2010/article/details/100886979
APP混合模式开发方案:
https://www.jianshu.com/p/aeac270cb7d1
目前主流的几种开发App方式介绍 :
https://www.jianshu.com/p/a7a77eb16a2a
当前主流框架:(分析来源:APP混合模式开发方案(2018年))
PhoneGap(cordova) (当前比较主流的H5框架)
AppCan(简单,付费,相对较少)
APICloud (官方号称7天做出一个App,能实现功能,但是实际上组件比较少)
React Native(之前非常火,但是学习成本高,ios和android代码并非通用)
AppMobi(听说很厉害,但是国外项目,文档少)
Flutter (跨平台ui框架,新语言dart,不支持热更新)
对比分析
经过讨论,我们选择其中的 Cordova、React Native、Flutter 作为备选
对比分析:https://www.jianshu.com/p/900bf9cbd005
Flutter和RN对比:https://www.jianshu.com/p/51c4f7f6e446
总结
框架名称
核心逻辑
优势
劣势
Cordova
Cordova通过对HTML、CSS、JS封装为原生APP
(h5技术)
1、iOS和Android基本上可以共用代码,一次编码,到处运行
2、纯web思维,开发速度快, 简单方便,所有UI组件都是有html模拟,可以统一 使用。
3、可实现在线更新,允许动态加载web js
4、文档多,开发者多,遇到问题容易解决,技术成熟
1、占用内存高一些,性能体验上,和原生存在差距
2、web技术无法解决一切问题,对于比较耗能的地方无法利用native的思维实现优势互补,如高体验的交互,动画等。
3、html解析依赖浏览器,存在兼容性问题
React Native
JavaScript运行业务代码,JS Bridge调用平台组件,原生控件进行渲染
1、虽然不能做到一次编码到处运行,但是基本上即使是两套代码, 也是相同的jsx语法, 使用js进行开发。
2、更贴近于原生开发,用户体验高于html, 开发效率较高
3、Flexbox布局据说比native的自适应布局更加简单高效
4、可实现在线更新(???)
1、对开发人员要求较高,当官方封装的 控件、API无法满足需求时就必然需要懂一些native的东西去扩展,扩展性仍然远远不如web,也远远不如直接写Native Code。
2、多平台需要些多套代码。
Flutter
自己实现了一套UI框架, 直接在系统底层渲染系统上层UI
1、高生产效率。一套代码可以开发出Android和iOS应用;
2、Dart语言使得同样的功能只需要很少的代码;
3、迭代更加方便, hot reload功能;
4、创建优雅的、高度可定制的用户界面。Flutter内置了对Material Design和Cupertino(iOS-favor)的UI组件库;提供了可定制 的UI组件,不再受制于OEM控件的限制;
5、借助可移植的GPU加速的渲染引擎以及高性能本地ARM代码运行 时以达到跨平台的高质量用户体验。
Flutter采用Dart语言开发,属于小众语言,需要一切都要重新 学习。
Flutter现在还处在Beta阶段,第三方库很少。
选择谁?
选框架需要先明确需求。比如:
1、支持业务好,可靠稳定
2、灵活,可扩展,快速响应,方便更新
3、用户体验好。
侧重点不同,对框架的取舍也应该不同。
老板说:我都要!
哭
我们项目最终选择了Cordova。
原因:
1、cordova 支持热更新,更灵活,便于及时响应需求,快速修复bug。(这是主要原因)
2、项目成员都有H5开发经验,并且有人用过Cordova的,没有但是没有人用过React Native 和 Flutter。(cordova 上手快,学习成本低)
3、该项目是内部项目,对体验要求相对低。(当前手机性能和网络性能都比较好了,性能差距也没那么明显)
ps:
网上有这样一种说法:
公司主营项目最好用native实现核心功能,配合H5做扩展。保证稳定和用户体验。
内部项目用新技术,之前的RN,现在Flutter。快速响应需求,积累新技术。
我觉得还是一定有道理的。虽然最终没有选这flutter,但是查资料过程中发现flutter的优势还是比较多的。如果能实现在线热更新,就完美了(不做热更新是为了防止苹果封杀?)