微信小程序的线程架构
小程序的线程架构
每个小程序包含一个描述整体程序的app实例和多个描述页面的page。
其中app由3个文件构成:
app.json 公共配置文件
app.wxss 公共样式文件
app.js 主体逻辑文件
page页面最多由4个文件构成:
page.jason 页面配置
page.wxml 页面结构
page.wxss 页面样式
page.js 页面主体逻辑
app.js和page.js中包含小程序在生命周期的每个阶段相应的事件。
典型的app.js代码结构如下:
- App({
- onLaunch:function(){
- //小程序启动时执行的初始化工作
- },
- onShow:function(){
- //程序启动或从后台进入前台时,触发执行的操作
- },
- onHide:function(){
- //程序从前台进入后台时,触发执行的操作
- },
- globalConf:{
- indexDate:'',
- matchData:''
- },
- dataCache:{},
- globalData:''
- })
典型的page.js代码结构如下:
- Page({
- Data:{
- }
- onLoad:function(){
- //页面加载时,执行的初始化工作
- },
- onReady:function(){
- //页面就绪后,触发执行的操作
- },
- onShow:function(){
- //页面打开时,触发执行的操作
- },
- onHide:function(){
- //页面隐藏时,触发执行的操作
- },
- onUnload:function(){
- //页面关闭时,触发执行的操作
- },
- //Events handler
- viewTap:function(){
- this.setData({
- text:'set some data for updating view.'
- })
- }
- })
一个完整的小程序执行的过程或生命周期如下:
- app.onLaunch-->app.onShow-->page1.onLoad-->page1.onShow-->page1.onReady
- (打开程序,第一个页面page1加载完成)
- -->page1.onHide-->page2.onLoad-->page2.onShow-->page2.onReady
- (从第1个页面打开第2个页面)
- -->page2.onUnload-->page1.onShow-->...-->app.onUnload
- (关闭page2,返回page1...退出小程序)
一个page的生命周期开始于onLoad事件,在整个生命周期内onLoad、onReady、onUnload这三个事件各执行一次,onHide和onShow事件在每次页面隐藏和显示时都会触发。
当用户手动触发小程序的退出箭头时,小程序仅触发app.Hide,下次进入小程序时会触发app.onShow以及当前页的page.onShow。仅当小程序在后台运行超过一定时间未被唤起、或者用户手动在小程序的控制栏里点击退出程序、或者小程序内存占用过大被系统关闭时,小程序将被销毁,会触发app.onUnload事件。
每个小程序分为2个线程,view与appServer。
view 线程 | appServer线程 |
.wxml + wxss ios:safari Android:X5浏览器 开发工具:chrome |
.js ios:JavaScriptCore Android:X5内核 开发工具:nwjs |
view线程负责解析渲染页面(wxml和wxss文件)。
appServer线程负责运行js。appServer线程运行在jsCore(安卓下运行在X5中,开发工具运行在nwjs中)。由于js不跑在WebView里,就不能直接操纵DOM和BOM,这就是小程序没有window全局变量的原因。
微信小程序的线程架构的更多相关文章
- 微信小程序 - 双线程模型
小程序的双线程模型 官方文档给出的双线程模型: 小程序的宿主环境 微信客户端提供双线程去执行wxml,wxss,js文件. 双线程模型 1.上述的渲染层上面运行着wxml文件,渲染层使用是的webvi ...
- 微信小程序大型系统架构中应用Redis缓存要点
在大型分布式系统架构中,必须选择适合的缓存技术以应对高并发,实现系统相应的高性能,酷客多小程序经过慎重选型,选择了采用基于腾讯云服务的Redis弹性缓存技术,结合Redis官方推荐的.NET驱动类库S ...
- 微信小程序开发(四)线程架构和开发步骤
线程架构 从前面的章节我们可以知道,.js文件是页面逻辑处理层.我们可以按需在app.js和page.js中添加程序在生命周期的每个阶段相应的事件.如在页面的onLoad时进行数据的下载,onShow ...
- 微信小程序开发教程(四)线程架构与开发步骤
线程架构 从前面的章节我们可以知道,.js文件是页面逻辑处理层.我们可以按需在app.js和page.js中添加程序在生命周期的每个阶段相应的事件.如在页面的onLoad时进行数据的下载,onShow ...
- 从微信小程序开发者工具源码看实现原理(三)- - 双线程通信
文章概览: 引言 小程序开发者工具双线程通信的设计 1.on: 用来收集小程序开发者工具触发的事件回调 2.invoke:以api方式调用开发工具提供的基础能力 3.publish:用来向Appser ...
- 微信小程序开发手册
目录: 数据绑定 条件渲染 列表渲染 API FAQ: <block wx:for> 和 <view wx:for>的区别 wx:if 什么情况下判断为假 坑列表: 微信版本6 ...
- ubuntu18.04微信小程序学习笔记
安装微信小程序开发工具 安装 https://github.com/cytle/wechat_web_devtools 创建快捷方式 sudo nautilus //在/usr/share/appli ...
- ****微信小程序架构解析
| 导语 微信小程序的公测掀起了学习小程序开发的浪潮,天生跨平台,即用即走.媲美原生体验.完善的文档.高效的开发框架,小程序给开发者带来了很多惊喜.通过这篇文章和大家一起分析小程序的架构,分享开发 ...
- 一起脱去小程序的外套和内衣 - 微信小程序架构解析
版权声明:本文由渠宏伟 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/760767001484042227 来源:腾云阁 ...
随机推荐
- MySQL 设置表注释
新增表增加注释 CREATE TABLE sys_tables ( owner ) NOT NULL COMMENT '归属用户', table_name ) NOT NULL COMMENT '表名 ...
- tcp滑动窗口和读写缓冲区
最近突然忘记了 滑动窗口的原理,在网上找到了比较好的视频,现在在这里同大家分享: 注:反正进程间切换 视频链接: https://www.youtube.com/watch?v=R6ArbkVj-N8 ...
- K8S 1.14.6中,将kubeadm集群证书颁发时间延长到100年
更改两个文件,重新编译kubeadm. 1,D:\kubernetes-1.14.6\staging\src\k8s.io\client-go\util\cert\cert.go // NewSelf ...
- 第十一周小组Scrum会议
会议照片 本周会议内 回顾上一周的内容 总结上一轮的得失: 我们在第一轮中,并没有做出什么东西,为此我们痛定思痛,制定了计划,确定第二轮迭代的目标: 1. 实现小程序与后台代码的交互 2. 将检索书籍 ...
- python 画小猪佩奇
转自:python画个小猪佩奇 # -*- coding: utf-8 -*- """ Created on Mon May 20 11:36:03 2019 @auth ...
- ResultMap(还没细看)
前言 MyBatis是基于“数据库结构不可控”的思想建立的,也就是我们希望数据库遵循第三范式或BCNF,但实际事与愿违,那么结果集映射就是MyBatis为我们提供这种理想与现实间转换的手段了,而res ...
- LeetCode98. 验证二叉搜索树
验证二叉搜索树 * * https://leetcode-cn.com/problems/validate-binary-search-tree/description/ * * algor ...
- Vue 变异方法unshift&pop&shift
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【笔记】Java微服务之路(持续更新)
微服务架构的说明: 微服务的架构风格是将一个单体的应用程序开发拆解为一组"小"的服务,这里的"小"是以业务边界 来区分的,而不是根据代码的多少区分.每个服务都运 ...
- 使用OpenSSL证书操作详解
一.OpenSSL简介 OpenSSL支持多种秘钥算法,包括RSA.DSA.ECDSA,RSA使用比较普遍.官网地址:https://www.openssl.org/,一般CeontOS系统都装有Op ...