2013年10月10日 星期四

轉載:[JS] 可適性週期執行的function

作者 Knuckles(阿德)
標題 [JS] 可適性週期執行的function
時間 2010年04月23日 Fri. PM 06:22:38

雖然js有 setInterval() 可以每隔一段時間執行某個function來更新資料

不過時間設太長的話不夠即時,太短的話又浪費資源

所以想弄個可適性週性執行的方法
讓使用者閒置愈久就愈慢更新

先用    setInterval("idle_time++",1000);
每秒把idle_time的值增加1,來記錄使用者閒置了多久

利用jQuery的事件觸發
    $(document).keydown(function(e){ idle_time=0; });
    $(document).mouseover(function(e){ idle_time=0; });
來偵測使用者是否有在使用鍵盤或滑鼠

接著我們就可以利用 idle_time 與 setTimeout() 來做可適性週性執行function

利用    setTimeout('autoUpdate()',20000);
當網頁載入後過20秒執行一次 autoUpdate()
(20000ms = 20s)

然後在 autoUpdate() 中這樣寫:

function autoUpdate(){
    if(idle_time>=20){ //要閒置20秒才會執行,避免使用者正在操作時自動更新
// 更新資料程式
    }
 
    if(idle_time<60 autoupdate="" p="" settimeout="">    else if(idle_time<300 autoupdate="" p="" settimeout="">    else if(idle_time<1200 autoupdate="" p="" settimeout="">    else setTimeout('autoUpdate()',3600000);
}

這樣使用者正在操作時就不會自動更新,而
閒置了20sec~1min時,每20sec執行一次
閒置了1min~5min時,每1min執行一次
閒置了5min~20min時,每5min執行一次
閒置了20min以上時,每小時執行一次

這樣就達到可適性週期執行的效果了

要注意執行 autoUpdate() 最後一定要有 setTimeout() 再把自己執行一次
如果前面設了個 return 跑出去的話,就不會再自動執行了



--
※ 來源: DISP BBS 看板: Knuckles_note 文章連結: http://disp.cc/b/11-1K6

沒有留言: