微信小程序的线程架构【推荐】


Posted in Javascript onMay 14, 2019

小程序的线程架构

每个小程序包含一个描述整体程序的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全局变量的原因。

总结

以上所述是小编给大家介绍的微信小程序的线程架构,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
Add Formatted Text to a Word Document
Jun 15 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
Jan 02 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
Mar 27 Javascript
深入了解JavaScript中的Symbol的使用方法
Jul 28 Javascript
Easyui Treegrid改变默认图标的方法
Apr 29 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
Apr 29 Javascript
jQuery处理XML文件的几种方法
Jun 14 Javascript
vue.js数据绑定的方法(单向、双向和一次性绑定)
Jul 13 Javascript
实例详解JSON取值(key是中文或者数字)方式
Aug 24 Javascript
AJAX XMLHttpRequest对象创建使用详解
Aug 20 Javascript
JS实现简易图片自动轮播
Oct 16 Javascript
Javascript中async与await的捕捉错误详解
Mar 03 Javascript
jquery实现选项卡切换代码实例
May 14 #jQuery
Vue表单之v-model绑定下拉列表功能
May 14 #Javascript
JQuery样式操作、click事件以及索引值-选项卡应用示例
May 14 #jQuery
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
May 14 #Javascript
vue实现动态按钮功能
May 13 #Javascript
详解小程序之简单登录注册表单验证
May 13 #Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
May 13 #Javascript
You might like
PHP多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
php屏蔽错误及提示的方法
2020/05/10 PHP
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
2010/06/18 Javascript
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
javascript 保存文件到本地实现方法
2012/11/29 Javascript
javascript jq 弹出层实例
2013/08/25 Javascript
javascript中动态加载js文件多种解决办法总结
2013/11/15 Javascript
jQuery之字体大小的设置方法
2014/02/27 Javascript
js隐式全局变量造成的bug示例代码
2014/04/22 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
AngularJS 指令详细介绍
2016/07/27 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
详解webpack es6 to es5支持配置
2017/05/04 Javascript
使用layui的layer组件做弹出层的例子
2019/09/27 Javascript
小程序实现多个选项卡切换
2020/06/19 Javascript
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
详细解析Python中的变量的数据类型
2015/05/13 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
查看python下OpenCV版本的方法
2018/08/03 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
基于Python生成个性二维码过程详解
2020/03/05 Python
Python多线程多进程实例对比解析
2020/03/12 Python
Python数据正态性检验实现过程
2020/04/18 Python
HTML5标签使用方法详解
2015/11/27 HTML / CSS
Whistles官网:英国女装品牌
2020/08/14 全球购物
教育英语专业毕业生的求职信
2014/03/13 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
店面出租协议书范本
2014/11/28 职场文书
2015年汽车销售员工作总结
2015/07/24 职场文书
什么是执行力?9个故事告诉您:成功绝非偶然!
2019/07/05 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python