本文章完全参考 阮一峰的《H5 手机 App 开发入门:概念篇》。
原生App(Native App)
专门为特定手机平台开发的应用程序,无法在其他平台运行。
一个手机软件如果要同时支持苹果手机、安卓手机,就需要为它们各写一个原生App。
原生App开发要使用与手机操作系统相同的语言。IOS的原生App使用Objective-C语言或Swift语言开发,Android的原生App则使用Java语言或Kotlin语言开发。由于跟底层操作系统的语言和技术模型一致,所以原生App的性能和用户体验都很好。
- 较好的性能和体验
- 可以使用系统的所有硬件和软件API,比如GPS、摄像头、麦克风、加速计、通知推送等,能充分发挥系统的潜力
- 每个手机平台需要建立一个独立的开发团队,大公司一般都有IOS、Android两个开发团队,所以开发成本高
- 原生App开发使用底层操作系统的语言,都是很重的编译语言,开发和调试成本相对较高,开发周期更长
- 原生App必须下载才能使用
Web App
使用网页作应用程序,必须在浏览器中使用。
- 不需要下载安装,打开浏览器就能使用
- 开发者调试比较容易
- 浏览器提供的Web API很有限,目前只有相机、GPS、电池等少数几个,大部分系统硬件都不能通过网页访问,也无法直接读取硬盘文件,所以Web App无法充分利用平台的硬件
- 网页通过浏览器渲染,性能不如原生App
混合App(Hybrid App)
混合App,就是 原生App+Web App,以原生App为容器,里面隐藏了一个浏览器,我们看到的网页就是由这个隐藏的浏览器渲染出来。这个隐藏的浏览器通常是系统提供的网页渲染控件,即WebView控件。
JSBridge往往以JavaScript语言提供,方便调试。
JSBridge介于原生App和浏览器之间。浏览器发送请求,通过JSBridge调用原生App的API,并返回结果。
WebView控件
在App里显示网页,一定需要一个网页引擎去解析网页。
通常情况下,App内部会使用WebView控件作为网页引擎。这是系统自带的控件,专门用来显示网页。应用程序的界面,只要放上WebView,就好像内嵌了一个浏览器窗口,可以显示网页。
了解更多WebView,可以继续看看阮一峰的这篇文章。
微信小程序
小程序本身是一个容器,也开发了自己的接口(JSBridge),该容器可以加载开发者编写的网页。
微信小程序的架构如下图所示。
微信小程序主要分为逻辑层、视图层,以及它们之下的原生部分。
逻辑层主要负责JS运行,视图层主要负责页面的渲染,它们之间通过Event
和Data
进行通信,同时通过JSBridge
调用原生的API。
由于原生部分对开发者来说就像是一个黑盒,因此,整个架构图的原生部分可以忽略,于是可将小程序架构进行简化,见下图。
可见,要运行小程序,只要在视图层提供对应的模板、样式,在逻辑层调用对应的App()/Page()
方法,且在方法里处理data、提供生命周期、事件函数等。