当前位置: 首页 > Web前端 > HTML5

关于小程序的一些知识总结

时间:2023-04-04 23:13:02 HTML5

1.小程序很多方法异步的原因(官方说法:天生异步)刚开始接触小程序的时候,发现微信提供的很多API都是异步的,比如路由跳转,设置和读取缓存,以及获取节点信息等微信接口都是异步的,需要传入回调函数获取结果。在我们正常的前端开发中,这些都不是异步的。当时很奇怪为什么会这样,最近在微信上看了一个开发教程,终于明白了。微信小程序开发教程小程序的底层架构是双线程模式。逻辑层和渲染层是两个独立的线程。渲染层是指渲染wxml和wxss,逻辑层是指执行js文件。这两个线程是分开的。运行,通过微信客户端进行通信,在调用微信的API时,其实就是执行js的线程与微信客户端进行通信。下图是微信官方文档中渲染页面的流程图注:上面说了,小程序的渲染层和逻辑层是两个独立的线程,只有一个线程执行js逻辑,所以声明在js中只要调用了函数,即使页面卸载了,最终还是会执行,所以需要注意一些间隔,或者其他注册的一些函数,如果不想在页面结束后继续执行离开,您必须在页面卸载时注销。2.发布订阅模式首先补充一个知识点:在小程序appjs的onLaunch中,全局变量wx中添加的属性是全局有效的,可以在其他页面调用,例如:onLaunch:function(){wx.aaa='123456';wx.bbb=function(){console.log('541521')}}onLoad:function(){console.log(wx.aaa);wx.bbb();}在发布之前我从来没有任何订阅的概念,但是多学一点也不错。最近抽空看了下,大概明白了一点。订阅:订阅就是在某处注册一个自定义事件,供其他地方调用发布:触发一个订阅的函数下面是我写的一个方法,可能有一些bug,但是我还没找到,欢迎大家提问communicateconstmyEvent=(function(){//声明方法varpub,sub,remove;//订阅缓存记录varsubCache={};//发布缓存记录varpubCache={};//参数缓存varparamCache={};//订阅事件sub=function(key,fn){if(!subCache[key]){subCache[key]=[];}//添加到订阅缓存subCache[key].push(fn);//如果有release记录,直接执行函数}//如果清除参数和发布缓存,则只允许执行一次//paramCache[key]=[];//pubCache[key]=undefined;}};pub=function(){varkey=Array.prototype.shift.call(arguments);varfns=subCache[key];varargs=Array.prototype.slice.call(arguments,0);pubCache[key]=true;paramCache[key]=args;如果(!fns||fns.length===0){返回;}//如果有订阅记录,直接执行for(letfnoffns){fn.apply(null,参数);}};remove=function(key,fn){if(subCache[key]){if(fn){for(leti=0,len=subCache[key].length;i