微信小程序基础
### 一. 微信小程序
[小程序](https://mp.weixin.qq.com/cgi-bin/wx)是一种新的开放能力,开发者可以快速地开发一个小程序。`小程序可以在微信内`被便捷地获取和传播,同时具有出色的使用体验。
1.微信小程序可以独立于微信存在么?
### 二. 微信小程序开发
微信小程序,可以以`个人`,`企业`,`政府`,`媒体`,`其他组织`方式在[微信公众平台注册小程序](https://mp.weixin.qq.com/wxopen/waregister?action=step1),注册完成后,进行[小程序账号申请](https://developers.weixin.qq.com/miniprogram/dev/#申请帐号)。选择对应的系统下载微信[小程序开发工具](https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html?t=18121111)。
### 三. 微信小程序结构
![Rendering preferences pane](https://raw.githubusercontent.com/Tweiwei497435786/HexoResource/master/H5/xiaochengxu_tool.png)
* `.json`后缀的是`JSON`配置文件
* `.wxml`后缀的是`WXML`模板文件
* `.wxss`后缀的是`WXSS`样式文件
* `.js`后缀的是`JS`脚本逻辑文件
### 四. 生命周期
微信客户端在打开小程序之前,会把整个小程序的代码包下载到本地。由于小程序分为应用和页面两个部分,所以[小程序的生命周期](https://www.jianshu.com/p/0078507e14d3)就涉及到三个部分,分别是:
* 应用的生命周期
* 页面的生命周期
* 应用的生命周期对页面生命周期的影响
##### (1)应用的生命周期
| 属性 | 类型 | 描述 | 触发时机 |
|:-------------: |:---------------:| :-------------:|:-------------:| | onLaunch | Function | 生命周期函数--监听小程序初始化 |当小程序初始化完成时,会触发 onLaunch(全局只触发一次) | | onShow | Function | 生命周期函数--监听小程序显示|当小程序启动,或从后台进入前台显示,会触发 onShow| | onHide | Function | 生命周期函数--监听小程序隐藏 |当小程序从前台进入后台,会触发 onHide|
`前台、后台定义:` 当用户点击左上角关闭,或者按了设备 Home 键离开微信,小程序并没有直接销毁,而是进入了后台;当再次进入微信或再次打开小程序,又会从后台进入前台。
* 用户首次打开小程序,触发 onLaunch(全局只触发一次)。
* 小程序初始化完成后,触发onShow方法,监听小程序显示。
* 小程序从前台进入后台,触发 onHide方法。
* 小程序从后台进入前台显示,触发 onShow方法。
* 小程序后台运行一定时间,或系统资源占用过高,会被销毁。
示例代码:
``` App({ onLaunch: function() { // Do something initial when launch. }, onShow: function() { // Do something when show. }, onHide: function() { // Do something when hide. }, onError: function(msg) { console.log(msg) }, globalData: 'I am global data' })
##### (2)页面的生命周期
| 属性 | 类型 | 描述 |
|:-------------: |:---------------:| :-------------:| | data | Object | 页面的初始数据 | | onLoad | Function | 生命周期函数--监听页面加载| | onReady | Function | 生命周期函数--监听页面初次渲染完成 | | onShow | Function | 生命周期函数--监听页面显示 | | onHide | Function | 生命周期函数--监听页面隐藏 | | onUnload | Function | 生命周期函数--监听页面卸载 |
通过 app.json 的 pages可以知道小程序的所有页面路径,放在首个的表示首页。
* 小程序注册完成后,加载页面,触发onLoad方法。
* 页面载入后触发onShow方法,显示页面。
* 首次显示页面,会触发onReady方法,渲染页面元素和样式,一个页面只会调用一次。
* 当小程序后台运行或跳转到其他页面时,触发onHide方法。
* 当小程序有后台进入到前台运行或重新进入页面时,触发onShow方法。
* 当使用重定向方法wx.redirectTo(OBJECT)或关闭当前页返回上一页wx.navigateBack(),触发onUnload。
小程序由两大线程组成:负责界面的视图线程(view thread)和负责数据、服务处理的服务线程(appservice thread),两者协同工作,完成小程序页面生命周期的调用。
##### 视图线程有四大状态:
* 初始化状态:初始化视图线程所需要的工作,初始化完成后向 “服务线程”发送初始化完成信号,然后进入等待状态,等待服务线程提供初始化数据。
* 首次渲染状态:当收到服务线程提供的初始化数据后(json和js中的data数据),渲染小程序界面,渲染完毕后,发送“首次渲染完成信号”给服务线程,并将页面展示给用户。
* 持续渲染状态:此时界面线程继续一直等待“服务线程”通过this.setdata()函数发送来的界面数据,只要收到就重新局部渲染,也因此只要更新数据并发送信号,界面就自动更新。
* 结束状态:页面被回收或者销毁、应用被系统回收、销毁时触发。
##### 服务线程五大状态:
* 初始化状态:此阶段仅启动服务线程所需的基本功能,比如信号发送模块。系统的初始化工作完毕,就调用自定义的onload和onshow,然后等待视图线程的“视图线程初始化完成”号。onload是只会首次渲染的时候执行一次,onshow是每次界面切换都会执行,简单理解,这就是唯一差别。
* 等待激活状态:接收到“视图线程初始化完成”信号后,将初始化数据发送给“视图线程”,等待视图线程完成初次渲染。
* 激活状态:收到视图线程发送来的“首次渲染完成”信号后,就进入激活状态既程序的正常运行状态,并调用自定义的onReady()函数。此状态下就可以通过 this.setData 函数发送界面数据给界面线程进行局部渲染,更新页面。
* 后台运行状态:如果界面进入后台,服务线程就进入后台运行状态,从目前的官方解读来说,这个状态挺奇怪的,和激活状态是相同的,也可以通过setdata函数更新界面的。毕竟小程序的框架刚推出,应该后续会有很大不同吧。
* 结束状态:页面被回收或者销毁、应用被系统回收、销毁时触发。
1.下载微信小程序代码包,是首次打开该小程序的时候?
##### (3)应用的生命周期对页面生命周期的影响
* 小程序初始化完成后,页面首次加载触发onLoad,只会触发一次。
* 当小程序进入到后台,先执行页面onHide方法再执行应用onHide方法。
* 当小程序从后台进入到前台,先执行应用onShow方法再执行页面onShow方法。
### 六. 参考
1.[小程序的官网](https://developers.weixin.qq.com/miniprogram/dev/#申请帐号)
2.小程序的[生命周期](https://www.jianshu.com/p/0078507e14d3)