小程序线程
小程序中包含两个线程
- view 线程负责解析渲染页面(wxml和wxss)
- appServer 线程负责运行 JavaScript。贯穿了整个小程序的主题逻辑、生命周期以及页面构成、样式等。小程序实例将由appServer线程运行。
测试:
//事件处理函数
bindViewTap: function() {
setTimeout(function() {
console.log('我是首页')
}, 3000);
// wx.navigateTo({
// url: '../logs/logs'
// })
// wx.redirectTo({
// url: '../logs/logs'
// })
wx.reLaunch({
url: '../logs/logs'
})
}
onShow: function () {
console.log('我是log页面');
}
结果:
问题描述
发现告警中有很多类似这样的报错,但是也没有影响主流程
错误样例: Cannot read property 'length' of undefined;at vipshop/act/pages/harmony/default/pages/index/main handleProxy function;at setTimeout callback function
注:只是类似这种问题
定位问题
首先这个是在 setTimeout 中出现的问题,所以我们可以从这里出发搜索。
发现在小程序中有使用 setTimeout 但是在页面 onHide() 或者 onUnload() 的时候没有执行 clearTimeout()。
当我们从当前的页面切换到其他页面的时候(当跳转了很多个页面之后,手机会默认回收一些页面),如下图所示
如果setTimeout 的callback 中有某些对象,或者函数操作,如果没有清除,后台线程将会继续执行,导致告警。
后果:
- setTimeout的回调函数中有跳转逻辑,会产生“莫名跳转”问题
- 报错告警
- 严重影响性能
重新问题
目前没有办法重现该问题
解决方法
在页面 onHide() 或者 onUnload() 的时候执行 clearTimeout()
参考
小程序定制js 线程不随页面销毁比如 setTimeout 和 setInterval