iOS宣布在2020年3月全面下架混合app
原生应用(native application,简称 native App)
优点:

1)较好的性能和体验;(2)可以使用系统的所有硬件和软件 API,比如 GPS、摄像头、麦克风、加速计、通知推送等等,能充分发挥系统的潜力。

缺点:

不夸平台成本高;开发和调试成本相对较高,时间周期长;必须下载安装才能使用,只要升级版本,就必须重新下载安装。用户往往不愿意更新版本,厂商被迫不得不长期支持很久以前的旧版本。

Web 应用(web application,简称 Web App)
优点:

(1)不需要下载安装,打开浏览器就能使用,而且总是使用最新版本;(2)对于开发者来说,Web App 写起来比较快,调试容易,不需要应用商店的批准就能发布。

缺点:

浏览器提供的 API(即 Web API)很有限,大部分系统硬件都不能通过网页访问,无法充分利用平台的硬件;通过浏览器渲染,性能不如原生 App,不适合做性能要求较高的页面;用户必须记住如何导航到它

Web App 可以覆盖更多的用户
原生 App 的用户使用时间(188分钟)远超 Web App(9分钟)

Chrome 团队开发了新技术"渐进式 Web App"(Progressive Web App,缩写 PWA)。它可以把网站缓存在手机里面,供离线时使用,还能在手机首屏生成图标,直接点击进入,并且有通知推送能力,也不带有浏览器的地址栏和状态栏,跟原生 App 的使用体验非常接近。
混合应用(hybrid application,简称 hybrid App)

壳是原生 App,但是里面放的是网页;
混合 App 里面的网页不同于普通网页,可以调用底层系统所有的 API。奥秘就在于外层容器提供了 API Bridge,充当底层 API 的中介,允许内部的网页调用底层。
主流: PhoneGap、Cordova、Ionic

缺点:

由于存在网页引擎的中间层,所以性能比较欠缺,不仅不如原生 App,而且由于 WebView 不是全功能浏览器,可能比 Web App 都要慢一些;由于页面跨平台,就无法使用只有特定平台提供的功能,导致体验不如纯的原生 App。

H5 这个词,可以理解成就是混合 App 模型,只不过它特指混合 App 的前端部分

小程序

针对特定容器的 H5 开发。微信本身是一个容器,开放自己的接口(JSbridge)

跨平台 App 技术栈 (cross-platform technology stack)

不使用 Web 技术
包括:React Native、Xamarin、Flutter

Flutter

Flutter使用Dart语言开发,Dart可以被编译(AOT)成不同平台的本地代码,让Flutter可以直接和平台通讯而不需要一个中间的桥接过程,从而提高了性能。

优点

A、混合开发中,最接近原生开发的框架;
B、性能强大,流畅;
C、优秀的路由设计;
D、优秀的动画设计;
E、简单易学,Dart语言更具优势;
F、跨多种平台,减少开发成本;支持插件,可以访问原生系统的调用。

缺点

A、脱离不开原生,开发人员需要具备原生(Android、iOS)基础开发能力;
B、适配问题,开发工具版本升级后,修改量大;
C、原生集成第三方SDK后,兼容性适配是个令人头痛的问题;
D、代码可读性较差,对代码质量和管理要求较高;
E、Widget的类型难以选择,糟糕的UI控件API;
F、Flutter packages和Dart packages上第三方sdk繁杂,适配性差,不可乱用;
G、目前几乎没有第三方开发者平台开发Flutter能力的SDK,需要原生去集成;
H、打包后,apk/ipa要大很多。

通常情况下,App 内部会使用 WebView 控件作为网页引擎。这是系统自带的控件
《没有银弹:软件工程的本质性与附属性工作》

参考:https://www.jianshu.com/p/b7f457e492c3
http://www.ruanyifeng.com/blog/2019/12/hybrid-app-concepts.html http://www.ruanyifeng.com/blog/2019/12/mobile-app-technology-stack.html