如今有一個小程序,對頁面數據的實時性很強,原本想用socket,仔細研究了一下,萬劍不離其中,它是websocket。服務端不會用,因此使用了傳統的http請求方式。開發微信小程序必需要知道的事html
1.請先看官方文檔web
https://developers.weixin.qq.com/miniprogram/dev/framework/app-service/route.htmljson
說明:官方文檔的路由觸發方式對頁面生命週期的影響。如圖:小程序
在項目過程當中,服務端不開心的說,你怎麼一直請求我,我服務都反應不過來快崩潰了。通過控制檯仔細查看發現,只要打開過的小程序頁面的定時器都在不間斷的運行着,這是爲何?微信小程序
後來研究發現,微信小程序爲何會有頁面生命週期這個概念,由於它和咱們傳統的web瀏覽器切換頁面的機制是不一樣的。小程序的頁面切換,是頁面的顯示和隱藏,只有沒有啓動過的頁面纔會進行初始化onLoad()。瀏覽器
明白了,頁面跳轉後,隱藏了頁面,可是依而後臺運行着。爲了減輕服務端的請求壓力,必須保證不展現頁面的數據,中止刷新。具體操做請查看以下代碼:微信
主要實如今js文件中websocket
var obj=wx.createSelectorQuery(); var config = require('../../config.js'); var app = getApp(); Page({ data: { timerTask:''//本頁面的定時任務,要在這裏聲明定時器的變量名 ,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) { // 頁面初次渲染完成時觸發。一個頁面只會調用一次,表明頁面已經準備穩當,能夠和視圖層進行交互。 }, onLoad: function (e) { var title = e.title var that = this wx.setNavigationBarTitle({ title: title }); }, onShow: function () { var that = this; var id = e.id //頁面加載成功後,要先請求一次數據,不然會在定時時間到達時纔會請求數據 search_data(that, id); //將定時器賦值給data中的timerTask變量,便於關閉定時器調用 that.setData({ timerTask: setInterval(function () { search_data(that, id); }, config.timeOut) }) }, onHide: function () { //寫在onHide()中,切換頁面或者切換底部菜單欄時關閉定時器。 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' // 默認值 } , dataType: 'json' , success: function (re) { console.log(re) if (re.statusCode==200){ //這裏是成功後的操做 } } }) }
來源:https://blog.csdn.net/weixin_42799222/article/details/86528216app