NativeAppReactNative(RN)于2015年发布,同样使用JavaScript语言进行跨平台APP开发。不同于H5开发,它使用JS桥接技术在运行时编译成各个平台的原生代码,它使用了Facebook的Flux技术。它的特点是:使用JavaScript语言,由于JS被广泛使用,RN也很容易被接受。RN依赖于JS的运行环境,也就是JS的桥接技术。它使用Facebook的Flux架构。RN只提供UI渲染和设备访问的API,很多功能必须依赖第三方库才能实现本地组件的使用。目前生态比较完善,有很多公司在使用,尤其是对于熟悉JS的同学来说,上手还是很方便的。支持热部署,可以在开发过程中节省大量时间。但它也有缺点:它的渲染方式仍然调用各个平台的原生控件,有时需要针对不同的平台做不同的优化。与H5相比,其性能有了很大的提升,但并没有得到解决。白屏和丢帧的问题依然存在。在传统的原生APP开发模式中,有IOS和AOS两大系统,每个APP都需要用自己的语言开发。使用ReactNative的跨平台应用程序也很多。也是与Flutter对比的主要对象。优点:优点是目前生态比较成熟缺点:开发发布成本高举个栗子:网易管家APP(Tab1、Tab2)应用技术:Swift、OC、JAVAWebApp人们常说的H5技术其实就是网页+JavaScript。比如现在流行的一些JS框架Vue、React、AngularJS等都是用来构建网页的。为移动端构建的网页可以实现跨平台功能,但其缺点也很明显:渲染效率低,用户体验差。很多H5在iOS平台上的表现尚可,但是在Android,尤其是一些低端机上的表现实在不敢恭维。网页很难调用设备硬件相关的API,支持的功能也很少。H5的缺点就是实现了这样的需求。手机网站,常被称为H5应用,是专门运行在手机浏览器上的网站应用。一般指SPA(SinglePageApplication)模式开发的网站,对应MPA(Multi-pageApplication,后面会介绍)。优点:开发发布成本低缺点:性能和体验不能说是最差的,但也受限于浏览器的处理能力。多次下载也会占用一定的用户流量。举个例子:网易管家APP(Tab3)应用技术:ReactJS、RegularJS等HybridApp混合模式移动应用,介于web-app和native-app之间的app,兼具“NativeApp交互体验好”和“跨平台开发WebApp“优势”(百度百科解释)主要原理是Native通过JSBridge等方式提供统一的API,然后使用HTML+CSS实现接口,JS编写逻辑,调用API,并且最终页面显示在webview中。在这种情况下,Android和iOS的API基本一致,所有的HybridApp都具有跨平台的效果。优点:开发发布更方便,效率介于Native之间App和WebApp。缺点:学习范围广,需要原生配合。例如:网易云音乐,我爱我的app应用技术:PhoneGap,AppCan,Wex5ReactNativeAppFacebookfoundHybridApp存在很多缺陷和不足,因此推出了全新的开源APP开发方案RNApp。.使用JSX语言编写原生界面,js通过JSBridge调用原生API渲染UI交互通信。优点:效率体验接近NativeApp,发布开发成本低于NativeApp。缺点:学习有一定成本,文档少。在RN的成功案例中,重新设计的开发模式站在巨人的肩膀上,以淘宝团队项目为养料。引起了广泛关注。2016年4月正式开源,v2.0版本正式支持Vue。.js,竞争对手RN。优点:开发效率和体验媲美RN,更多跨平台缺点:刚起步,社区不如RN活跃例如:淘宝、天猫、饿了么等都在用Flutter咸鱼,而且他们也建议大家尝试一下谷歌的新技术,但是国内好像工作岗位很少。有人说,写到这里,35岁以后就可以出国了。(我会持怀疑态度)Flutter简介Flutter是Google推出的开源移动应用开发框架。开发者只需开发一套代码,即可同时在iOS和Android平台上运行。它使用Dart语言进行开发,最后编译成各个平台的原生代码,既保证了开发效率,又保证了各个平台的运行效率。相当于从头到尾重写一套UI框架,不依赖特定的平台组件。它的所有组件都是“小部件”。渲染引擎由高效的渲染库Skia实现。Flutter也看到了目前跨平台方案的不足,所以借鉴了ReactNative的一些思想,做了很大的优化。它将代码编译成原生代码,直接使用其高效渲染引擎Skia在各个平台进行渲染,无需桥接或调用平台相关控件。这种设计思路解决了不同平台的性能问题。得益于它的设计理念,我们实际上可以实现一套代码运行在不同的平台上。推出后,关注开发者和相关教程的数量增长速度超过了当时的ReactNative。其特点包括:使用谷歌自主开发的Dart语言。Dart语言是一种强类型语言,支持面向对象,易学易用。使用谷歌自家的Skia渲染引擎,Android自带Skia引擎,iOS平台的Flutter也会将Skia引擎封装到APP中,实现高效渲染。目前有非常丰富的视图组件,可以点这里查看其组件目录,包括Android上常用的MaterialDesign(材料设计)UI风格,以及iOS(Cupertino)风格。因为它的渲染不依赖于各个平台的相关组件,所以在不同平台上运行的效果是一致的。还支持热部署,开发的时候可以实时看到效果,就像web开发一样。它目前存在的一些问题是:目前国内的学习资源还不丰富,使用Flutter的公司比较少。相关生态没有ReactNative丰富,但其开发速度比ReactNative快很多。综上所述,跨平台开发用到的语言有很多,比如PWA、UniApp等,从我个人的观点来看,Flutter是有发展潜力的。虽然目前Flutter不是很流行,但我相信它是跨平台解决方案的未来。如果谷歌的新系统FuchsiaOS能够像今天的Android一样繁荣,甚至取代Android,Flutter的发展也将迎来巅峰。如果你想做一张名片之类的东西让更多人知道你的产品,那么也许一个网站就足够了;但如果产品的核心功能只能由原生APP提供,或者你想保证用户有更好的体验,更强的粘性,那么你可能需要做一个原生APP。
