微信小程序逻辑层与程序注册构造器及 小程序生命周期、运行机制、场景值

(1)小程序逻辑层 App Service(APP服务)
(2)ServiceWorker
(3)web worker
(4)程序构造/注册器App()

逻辑层 App Service(APP服务)

小程序开发框架的逻辑层使用 JavaScript 引擎为小程序提供开发者 JavaScript 代码的运行环境以及微信小程序的特有功能。
逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈。
开发者写的所有代码最终将会打包成一份 JavaScript 文件,并在小程序启动的时候运行,直到小程序销毁。这一行为类似 ServiceWorker,所以逻辑层也称之为 App Service。

ServiceWorker

本质:
Service Worker 是一种 Web Worker。它本质上是一个与主浏览器线程分开运行的 JavaScript 文件,可以拦截网络请求、缓存资源或从缓存中检索资源、传递推送消息。

作用:
由于 Workers 与主线程分开运行,因此 Service Worker 独立于与其关联的应用程序。这将导致以下结果:

作用:
①当应用程序处于没有活动状态时,Service Worker 可以从服务器接收推送消息。这可以让应用程序向用户显示推送通知,即使它未打开。
注意:浏览器在没有运行的情况下是否能收到通知取决于浏览器如何与操作系统集成。
例如,在桌面操作系统上,Chrome 浏览器和 Firefox 只会在浏览器运行时收到通知。然而,Android 是在接收到推送消息时唤醒任何浏览器,并且无论浏览器状态如何都将始终接收推送消息,所以在web app常用此方法。
作用:
②Service Worker 不能直接访问 DOM

生命周期:
安装 Service Worker,需要在 JavaScript 主进程中进行注册
注册完毕后,便会开始激活加载相关事件
使用完毕后销毁

web worker

背景:
JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成,一次只能做一件事。前面的任务没做完,后面的任务只能等着。随着电脑计算能力的增强,尤其是多核 CPU 的出现,单线程带来很大的不便,无法充分发挥计算机的计算能力。

作用:
Web Worker 的作用,就是为 JavaScript 创造多线程环境,允许主线程创建 Worker 线程,将一些任务分配给后者运行。在主线程运行的同时,Worker 线程在后台运行,两者互不干扰。等到 Worker 线程完成计算任务,再把结果返回给主线程。
简介:
当在 HTML 页面中执行脚本时,页面状态是不可响应的,直到脚本完成。
web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时H5的 web worker 在后台运行。
浏览器支持:
所有主流浏览器均支持 web worker,除了 Internet Explorer。
通俗理解:
web worker 是运行在后台的 JavaScript,不会影响页面的性能
注意:
Worker 线程一旦新建成功,就会始终运行,不会被主线程上的活动(比如用户点击按钮、提交表单)打断。
这样有利于随时响应主线程的通信。但是,这也造成了 Worker 比较耗费资源,不应该过度使用,而且一旦使用完毕,就应该关闭。

逻辑层 App Service

在 JavaScript 的基础上,增加了一些功能,以方便小程序的开发:
①增加 App({}) 和 Page({}) 方法,进行程序注册和页面注册。
②增加 getApp 和 getCurrentPages 方法,分别用来获取 App 实例和当前页面栈,至于实例与页面栈,后续会一一介绍。
③提供丰富的 API,如微信用户数据,扫一扫,支付等微信特有能力。
④提供模块化能力,每个页面有独立的作用域。
注意:
小程序框架的逻辑层并非运行在浏览器中,因此 JavaScript 在 web 中一些能力都无法使用,如 window,document 等。

缘由:
小程序逻辑层的行为类似 ServiceWorker,而ServiceWorker的本质是一种 Web Worker,它本质上是一个与主浏览器线程分开运行的 JavaScript 文件。由于 web worker 位于外部文件中,所以无法访问相关BOM和DOM。

程序与页面

程序与页面:
从逻辑组成来说,一个小程序是由多个“页面”组成的“程序”。
往往需要在“程序”启动或者退出的时候存储数据或者在“页面”显示或者隐藏的时候做一些逻辑处理,了解程序和页面的概念以及它们的生命周期是非常重要的。
逻辑组成上分为小程序级别和页面级别,所以小程序的生命周期也可以分为:程序生命周期和页面生命周期。

程序构造/注册器App()

App注册:小程序加载时首先在入口文件 app.js 中调用 App 方法进行注册,绑定生命周期回调函数、错误监听和页面不存在监听函数等。

注册小程序:App()方法

所以App方法也被称为程序构造器或者程序注册器。

获取程序构造/注册器getApp():
宿主环境提供了 App() 构造器用来注册一个程序App,App() 构造器必须写在项目根目录的入口文件app.js里,在其他JS脚本中可以使用宿主环境提供的 getApp() 来获取程序实例。

例如在index.js获取程序构造器
在这里插入图片描述
App() 参数
App构造器接受一个Object参数
在这里插入图片描述App构造器的参数

App() 参数:
基础App构造器案例

在这里插入图片描述小程序全局数据
小程序的JS脚本是运行在JsCore的线程里,小程序的每个页面各自有一个WebView线程进行渲染,但是小程序切换页面时,小程序逻辑层的JS脚本运行上下文依旧在同一个JsCore线程中。

共享全局数据:
因为小程序逻辑层的JS脚本运行上下文始终在同一个JsCore线程中,因此不同页面直接可以通过App实例下的属性来共享数据,App构造器可以传递其他参数作为全局属性以达到全局共享数据的目的。

小程序全局共享数据
在这里插入图片描述
以上是关于app.js的构造器及生命周期下面继续介绍页面的构造器及生命周期

(1)程序构造/注册器App()
(2)小程序生命周期
(3)小程序运行机制
(4)scene场景值

体验人员扫描二维码进入时有时进入的不是首页???
在这里插入图片描述
方案:
登录小程序后台,重新设置体验版打开时的特定页面路径,更换为当前首页即可
在这里插入图片描述

注册器/构造器分类:

小程序级别:App-----程序构造器/注册器
页面级别:Page------页面构造器/注册器
小程序的生命周期:

在这里插入图片描述
App() 参数
App构造器接受一个Object参数

在这里插入图片描述App构造器的参数

App() 参数:
基础App构造器案例
在这里插入图片描述

小程序生命周期

①onLaunch 生命周期函数–监听小程序初始化
当小程序初始化完成时,会触发 onLaunch(全局只触发一次)

②onShow 生命周期函数–监听小程序显示
当小程序启动,或从后台进入前台显示,会触发 onShow

③onHide 生命周期函数–监听小程序隐藏
当小程序从前台进入后台,会触发 onHide
接下来依次验证下

在这里插入图片描述(1)监听小程序初始化与显示
在这里插入图片描述(2)监听小程序切换后台
在这里插入图片描述监听小程序切换前台
在这里插入图片描述从以上便可分析出

小程序的生命周期函数的调用顺序为:
onLaunch>onShow>onHide
小程序初始化→小程序显示→小程序隐藏

小程序运行机制

这里需要补充下小程序运行机制
(1)小程序启动
小程序启动有两种情况,一种是「冷启动」,一种是「热启动」。
①热启动:假如用户已经打开过该小程序,然后在一定时间内再次打开,此时无需重新启动,只需将后台小程序切换到前台,该过程就是热启动;
在这里插入图片描述(1)小程序启动
②冷启动:用户首次打开或小程序主动销毁后再次打开的情况,此时小程序需要重新加载启动,即冷启动。
在这里插入图片描述前台/后台状态

前台→后台—onHide
当用户点击右上角胶囊按钮关闭小程序,或者按了设备 Home 键离开微信时,小程序并没有直接销毁,而是进入了后台状态;
后台→前台—onShow
当用户再次进入微信或再次打开小程序,小程序又会从后台进入前台。
小程序销毁

只有当小程序进入后台一定时间,或者系统资源占用过高,才会被真正的销毁。
①当小程序进入后台,客户端会维持一段时间的运行状态,超过一定时间后(目前是5分钟)小程序会被微信主动销毁。
②当小程序占用系统资源过高,可能会被系统销毁或被微信客户端主动回收
(1)onLaunch初始化
初次进入小程序的时候,微信客户端初始化好宿主环境,同时从网络下载或者从本地缓存中拿到小程序的代码包,把它注入到宿主环境
初始化完毕后,微信客户端就会给App实例派发onLaunch事件,App构造器参数所定义的onLaunch方法会被调用。
2)onShow小程序显示
在初始化完毕之后,会调用onShow钩子函数,监听显示

(3)onHide小程序进入后台状态
进入小程序之后,用户可以点击右上角的关闭或者按手机设备的Home键离开小程序,此时小程序并没有被直接销毁
我们把这种情况称为“小程序进入后台状态—后台态”,App构造器参数所定义的onHide方法会被调用。

(4)onShow小程序进入前台状态:后台→前台
当再次回到微信或者再次打开小程序时,微信客户端会把“后台”的小程序唤醒
我们把这种情况称为“小程序进入前台状态”,App构造器参数所定义的onShow方法会被调用。

小结:
综上可以看出,App的生命周期是由微信客户端根据用户操作主动触发的。为了避免程序上的混乱,避免从其他代码里调用App实例的生命周期函数。

onLaunch, onShow 方法会返回一个参数对象, 里面包含了多个参数 , 常用到的有path,query和scene

参数:
①path是打开小程序的页面路径
②query是打开小程序页面url的参数,后续介绍
③scene是打开小程序的场景值

scene场景值作用:
场景值用来描述用户进入小程序的路径

缘由:
由于系统限制,目前还无法获取到按 Home 键退出到桌面,然后从桌面再次进小程序的场景值,对于这种情况,会保留上一次的场景值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值