Js定時器生產環境中的使用與介紹

一、分類

js的定時器有兩種web

setInterval(code,millisec[,"lang"]) :按照指定的週期(以毫秒計)來調用函數或計算表達式。方法會不停地調用函數,直到clearInterval() 函數被調用或窗口被關閉,由 setInterval() 返回的 ID 值可用做 clearInterval() 方法的參數。ajax

setTimeout(code,millisec) :在指定的毫秒數後調用函數或計算表達式。瀏覽器

二、settimeout和setinterval區別

setTimeout(表達式,延時時間)在執行時,是在載入後延遲指定時間後,去執行一次表達式,記住,次數是一次 
setInterval(表達式,交互時間)則不同,它從載入後,每隔指定的時間就執行一次表達式 。websocket

三、清除定時器:

window.clearInterval(timer1)和window.clearTimeout(time1);兩種清除方式均可以清除經過setTimeout和setInterval設置的定時器(兩種方式在設置定時器的時候有區別,清除定時器的時候沒有區別),而且參數不只能夠是timer,還能夠是其返回值,須要注意的是,定時器即便清除了,其返回值也不會清除,以後設置的定時器的返回值也會在其返回值的基礎上繼續向後排;網絡

四、使用場景

(1)、寫計時器,好比倒計時狀況session

(2)、輪詢檢測網絡或者登錄狀態socket

(3)、輪詢定時刷新頁面局部數據jsp

...函數

五、使用方法

下面的例子是輪詢檢測網絡狀態信息用到了setInterval,setTimeout兩個定時器post

//輪詢判斷是否網絡斷開
checkNet();
/**
 * 輪詢,判斷是否聯網
 */
function checkNet(){
   setInterval(function(){
      $.ajax({
         url: getContextPath()+"/login/checknet",
         type:"post",
         timeout: 5 * 1000,
         success:function(result){
            console.log("輪詢鏈接成功");
         },
         complete: function (XMLHttpRequest,status) {
                if(status == 'timeout') {
                   console.log("complete網絡斷開!");
                  var xmlhttp = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHttp");  
                 xmlhttp.abort();   
                    OffTheNet();
                }
            }
      });
   }, 5 * 1000);
}

/**
 * 斷網處理方案:從新登錄
 */
function OffTheNet(outTime){
   websocket.close();
   var _time = 4000;
   if(outTime != null && typeof(outTime) != "undefined"){
      _time = outTime;
   }
   layer.msg("網絡斷開,請從新登錄!",{
        icon: 0,
        time: _time
      });
   setTimeout(function(){
      sessionStorage.setItem("OFFTHENET",true);
      location.href = getRootPath()+"/jsps/login/login.jsp";
   },_time);
}

六、新手容易出現的問題

       記得在不須要的頁面若是有定時器任務必定要先關閉定時器任務,尤爲是從定時任務的頁面跳轉到其餘頁面時,若是沒有及時關閉有可能會多餘的請求網絡開銷,瀏覽器頁面打開緩慢,容易使得瀏覽器崩潰,我開發的時候就出現過這個狀況。寫這篇博客也是給本身一個提醒吧。

相關文章
相關標籤/搜索