webapp 慎用setInterval、setTimeout


其實這片文章剛開始我啥也沒寫的,但也有20多的訪問量,所以覺得大家還是比較關注這個問題,所以找機會寫下。

 

問題的引出:

   為什么我說的時webapp中慎用setInterval、setTimeout, 既然這么說肯定時要強調兩點:

 1、 webapp 下, 這里的webapp我主要想說的時單頁應用(SPA)

 2、 慎用, 慎用說明還是可以用的,但要注意。

 

一、 我們知道  setInterval、setTimeout 時基於 window下的。  看截圖

  

       而SPA項目又有一個特別的地方就是切換頁面時,整個頁面時不會重新刷新的,以 setInterval 為例,最常見的就是 登入頁面60s短信驗證碼。當你在60s之內你已經完成登入操作了,並且跳轉到別的頁面,而因為時spa項目,window是不會刷新的,所以即使你跳轉到別的頁面,你的  setInterval  還在運行, 就算你代碼中 用了clearInterval,但也是要60s 之后才會去清除,而此時你早已經登入成功去做別的了, 當你設置的時間過多,或者你的項目中使用setInterval、setTimeout過多。 對你手機內存消耗時不可小覷的,會影響用戶流暢度。

 

    

 

問題解決:

那怎么解決呢: 很簡單,就是你跳轉頁面的時候去主動 clearInterval 一下, 這個時候你就要統一的去管理所有 setTimeout setInterval 生成的timer。

window.app = { timers : [] };

var timer = setInterval(function( )  {console.info('a')}, 1000);

app.timers.push(timer);

var timer1 = setInterval(function( )  {console.info('b')}, 1000);

app.timers.push(timer1);

//當你頁面跳轉時,統一去 clearInterval, 因為一般做單頁的,跳轉等函數都是封裝的了,你只要在封裝的地方加上下面的代碼就可以了。

app.timers.forEach(function (item) {
  clearInterval(item);
});

上面的代碼都是自己直接 手寫的,連編輯器都沒用,不確保正常跑起來, 但思路就是這么個意思,這篇文章也主要是講這么個思路,拋磚引玉之用, 希望能舉一反三, 對webapp下的其它全局函數是不是也要注意這個問題呢? 大家可以一起探討。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM