有一個小程序,對頁面數(shù)據(jù)的實時性很強,本來想用socket,仔細研究了一下,萬劍不離其中,它是websocket。服務(wù)端不會用,所以使用了傳統(tǒng)的http請求方式。
1.請先看官方文檔
https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/route.html
說明:官方文檔的路由觸發(fā)方式對頁面生命周期的影響。如圖:
在項目過程中,服務(wù)端不開心的說,你怎么一直請求我,我服務(wù)都反應(yīng)不過來快崩潰了。經(jīng)過控制臺仔細查看發(fā)現(xiàn),只要打開過的小程序頁面的定時器都在不間斷的運行著,這是為什么?
后來研究發(fā)現(xiàn),微信小程序為什么會有頁面生命周期這個概念,因為它和我們傳統(tǒng)的web瀏覽器切換頁面的機制是不同的。小程序的頁面切換,是頁面的顯示和隱藏,只有沒有啟動過的頁面才會進行初始化onLoad()。
明白了,頁面跳轉(zhuǎn)后,隱藏了頁面,但是依然后臺運行著。為了減輕服務(wù)端的請求壓力,必須保證不展示頁面的數(shù)據(jù),停止刷新。具體操作請查看如下代碼:
主要實現(xiàn)在js文件中
var obj=wx.createSelectorQuery();
var config = require('../../config.js');
var app = getApp();
Page({
data: {
timerTask:''//本頁面的定時任務(wù),要在這里聲明定時器的變量名
,title: '工作面'
,listRy: {'bianhao': '0','xingming': '0','dangqianquduan': '0','daodashike': '0','banci': '0','jibie': '0','bumen': '0'}
,listXz: [
{'bianh': '0','machineid': '0','detectorid': '0','xtime': '0','quduanming': '0'},
{'bianh': '0','machineid': '0','detectorid': '0','xtime': '0','quduanming': '0'},
{'bianh': '0','machineid': '0','detectorid': '0','xtime': '0','quduanming': '0'},
]
},
onReady:function(res) {
// 頁面初次渲染完成時觸發(fā)。一個頁面只會調(diào)用一次,代表頁面已經(jīng)準(zhǔn)備妥當(dāng),可以和視圖層進行交互。
},
onLoad: function (e) {
var title = e.title
var that = this
wx.setNavigationBarTitle({
title: title
});
},
onShow: function () {
var that = this;
var id = e.id
//頁面加載成功后,要先請求一次數(shù)據(jù),否則會在定時時間到達時才會請求數(shù)據(jù)
search_data(that, id);
//將定時器賦值給data中的timerTask變量,便于關(guān)閉定時器調(diào)用
that.setData({
timerTask: setInterval(function () {
search_data(that, id);
}, config.timeOut)
})
},
onHide: function () {
//寫在onHide()中,切換頁面或者切換底部菜單欄時關(guān)閉定時器。
clearInterval(this.data.timerTask);
},
qiehuan_click: function(e) {
this.setData({
select:e.target.dataset.num
})
},
})
function search_data(that,id){
wx.request({
url: config.service.host
, method: 'post'
, data: {'query': 'gzm','bianh': id}
, header: {
'content-type': 'application/x-www-form-urlencoded' // 默認(rèn)值
}
, dataType: 'json'
, success: function (re) {
console.log(re)
if (re.statusCode==200){
//這里是成功后的操作
}
}
})
}
本站文章版權(quán)歸原作者及原出處所有 。內(nèi)容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負(fù)責(zé),本站只提供參考并不構(gòu)成任何投資及應(yīng)用建議。本站是一個個人學(xué)習(xí)交流的平臺,網(wǎng)站上部分文章為轉(zhuǎn)載,并不用于任何商業(yè)目的,我們已經(jīng)盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯(lián)系我們,我們將根據(jù)著作權(quán)人的要求,立即更正或者刪除有關(guān)內(nèi)容。本站擁有對此聲明的最終解釋權(quán)。