成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

高級定時器---《高程3》

miya / 2931人閱讀

摘要:也就是說,代碼隊(duì)列中僅能有一個間歇定時器在等待。這導(dǎo)致兩個問題,一是某些間隔會跳過,二是多個定時器的代碼之間的間隔可能比預(yù)期的小。

定時器:間歇調(diào)用和超時調(diào)用

超時調(diào)用:setTimeout(),接受兩個參數(shù),第一個參數(shù)是可執(zhí)行的JavaScript代碼字符串,或是回調(diào)函數(shù),第二個參數(shù)是毫秒為單位的插入代碼隊(duì)列的的時間。
清除方式:clearTimeout(),參數(shù)是設(shè)置setTimeout時返回的數(shù)值ID。

var timeId = setTimeout(function(){
    alert("hello world");    
}, 5000);
clearTimeout(timeId);

間歇調(diào)用:setInterval(),接受的兩個參數(shù)和setTimeout()類似,只是時間參數(shù)代表兩次間隔插入代碼隊(duì)列的的時間。
清除方式:clearInterval(),參數(shù)是設(shè)置間歇調(diào)用時返回的數(shù)值ID。清除間歇調(diào)用很重要,因?yàn)椴磺宄蜁恢眻?zhí)行,也就是一直在JavaScript的時間線中。因?yàn)镴avaScript是單線程執(zhí)行的,也就是說如果不清除間歇調(diào)用,代碼隊(duì)列中的其他的代碼即使進(jìn)入了代碼也是無法執(zhí)行的。事實(shí)上,間歇調(diào)用導(dǎo)致的問題不止如此。

    var timeId = setInterval(function(){
        alert("hello world");    
    }, 5000);
    clearInterval(timeId);

一般沒有必要跟蹤超時調(diào)用的ID,因?yàn)閳?zhí)行一次之后就自動清除了;但是間歇調(diào)用最好人工清除,或者采用超時調(diào)用模擬間歇調(diào)用,這還有另外一個好處。

JavaScript的時間線及間歇調(diào)用的困擾

JavaScript是單線程執(zhí)行的,不同時期由不同的代碼控制JavaScript時間線,由瀏覽器從代碼隊(duì)列中選擇特定的代碼執(zhí)行。定時器中設(shè)置的時間實(shí)際上是指定時器代碼進(jìn)入代碼隊(duì)列的時間,實(shí)際開始運(yùn)行時間取決于JavaScript進(jìn)程是否空閑,如果不空閑就要等待正在執(zhí)行的代碼完成執(zhí)行。

var btn = document.getElementById(“my-btn”);
btn.onclick = function(){
setTimeout(function(){
        document.getElementById(“message”).style.visibility = “visible”;
    }, 250);
};

上圖設(shè)置了一個250ms后的timer,但是由于onclick事件處理程序要執(zhí)行300ms,即使到了255ms,timer也是不執(zhí)行的,直到onclick執(zhí)行完才能執(zhí)行。

JavaScript的這種單線程執(zhí)行方式導(dǎo)致了瀏覽器添加間歇定時器代碼時,僅能等待隊(duì)列中沒有該定時器的代碼實(shí)例時才能加進(jìn)去,否則加不進(jìn)去。也就是說,代碼隊(duì)列中僅能有一個間歇定時器在等待。這導(dǎo)致兩個問題,一是某些間隔會跳過,二是多個定時器的代碼之間的間隔可能比預(yù)期的小。

上圖表明,205ms加入的定時器在300ms開始執(zhí)行,由于定時器執(zhí)行時間超過一個時間間隔(200ms),在405ms第二個定時器進(jìn)入隊(duì)列,但是605ms時的代碼卻難以進(jìn)入隊(duì)列了,這是因?yàn)?05ms進(jìn)入的代碼還在隊(duì)列中。
為了避免重復(fù)定時器的缺點(diǎn),常使用超時定時器模擬間歇定時器,如下:

setTimeout(function(){
//processing
setTimeout(arguments.callee, interval);
}, interval);
具體的使用實(shí)例如下:

  
  
  
  
    
the onlt one div
定時器的使用:數(shù)組分塊(array chunking)和函數(shù)節(jié)流(function throttling)

數(shù)組分塊的原因:JavaScript的功能是被限制的,無法像桌面應(yīng)用一樣無限制的占有資源。其中一個限制就是執(zhí)行時間的限制,如果代碼執(zhí)行超過特定的時間或者特定的語句數(shù)目就禁止繼續(xù)執(zhí)行。因此,在處理大規(guī)模數(shù)組時,可以使用定時器將數(shù)組分為多個塊間斷執(zhí)行,JavaScript進(jìn)程有時間在處理數(shù)組項(xiàng)目的事件之間轉(zhuǎn)入空閑,這樣整個數(shù)組項(xiàng)目項(xiàng)目的處理就不會受執(zhí)行時間限制。實(shí)現(xiàn)數(shù)組分組的函數(shù)如下:

    
the onlt one div

函數(shù)節(jié)流的原因:瀏覽器中某些計算很耗費(fèi)資源,包括CPU和內(nèi)存,例如resize操作,因此如果循環(huán)執(zhí)行這些操作會使瀏覽器崩潰。函數(shù)節(jié)流的原理類似于數(shù)組分塊,也就是某一個執(zhí)行代碼用定時器分位數(shù)塊執(zhí)行。不詳細(xì)介紹。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/80610.html

相關(guān)文章

  • 高級時器---《高程3

    摘要:也就是說,代碼隊(duì)列中僅能有一個間歇定時器在等待。這導(dǎo)致兩個問題,一是某些間隔會跳過,二是多個定時器的代碼之間的間隔可能比預(yù)期的小。 定時器:間歇調(diào)用和超時調(diào)用 超時調(diào)用:setTimeout(),接受兩個參數(shù),第一個參數(shù)是可執(zhí)行的JavaScript代碼字符串,或是回調(diào)函數(shù),第二個參數(shù)是毫秒為單位的插入代碼隊(duì)列的的時間。清除方式:clearTimeout(),參數(shù)是設(shè)置setTimeo...

    hikui 評論0 收藏0
  • 高程3總結(jié)#第22章高級技巧

    摘要:如果構(gòu)造函數(shù)竊取結(jié)合使用原型鏈或者寄生組合則可以解決這個問題惰性載入函數(shù)惰性載入表示函數(shù)執(zhí)行的分支僅會發(fā)生一次。當(dāng)?shù)诙握{(diào)用該函數(shù)時,它會清除前一次的定時器并設(shè)置另一個。,用于注銷某個事件類型的事件處理程序。 高級技巧 高級函數(shù) 安全的類型檢測 typeof操作符在檢測數(shù)據(jù)類型時,可能會得到不靠譜的結(jié)果 instanceof操作符在存在多個全局作用域,也就是頁面包含多個iframe的...

    CKJOKER 評論0 收藏0
  • JS高程中的垃圾回收機(jī)制與常見內(nèi)存泄露的解決方法

    摘要:解決方式是,當(dāng)我們不使用它們的時候,手動切斷鏈接淘汰把和對象轉(zhuǎn)為了真正的對象,避免了使用這種垃圾收集策略,消除了以下常見的內(nèi)存泄漏的主要原因。以上參考資料高程垃圾收集類內(nèi)存泄漏及如何避免內(nèi)存泄露及解決方案詳解類內(nèi)存泄漏及如何避免 showImg(http://ww1.sinaimg.cn/large/005Y4rCogy1ft1ikzcqzqj30ka0et77a.jpg); 前言 起...

    kidsamong 評論0 收藏0
  • 三張圖理解JS高級時器

    摘要:圖二解讀定時器可以在指定時間把定時器代碼加入待執(zhí)行隊(duì)列,但并不能保證代碼執(zhí)行時機(jī),待執(zhí)行隊(duì)列中的代碼要等進(jìn)程空閑時才能執(zhí)行。也就是說定時器每隔間隔觸發(fā)一次,嘗試加入隊(duì)列,擁堵時段將直接忽略本次操作。 圖片出自JS高程(第三版) showImg(https://segmentfault.com/img/bVbgC3V?w=1337&h=313); 圖一解讀:JS運(yùn)行于單線程的環(huán)境中:頁面...

    LiveVideoStack 評論0 收藏0
  • 高級函數(shù)技巧-函數(shù)防抖與節(jié)流

    摘要:封裝方法也比較簡單,書中對此問題也進(jìn)行了處理使用定時器,讓函數(shù)延遲秒后執(zhí)行,在此秒內(nèi),然后函數(shù)再次被調(diào)用,則刪除上次的定時器,取消上次調(diào)用的隊(duì)列任務(wù),重新設(shè)置定時器。 在實(shí)際開發(fā)中,函數(shù)一定是最實(shí)用最頻繁的一部分,無論是以函數(shù)為核心的函數(shù)式編程,還是更多人選擇的面向?qū)ο笫降木幊?,都會有函?shù)的身影,所以對函數(shù)進(jìn)行深入的研究是非常有必要的。 函數(shù)節(jié)流 比較直白的說,函數(shù)節(jié)流就是強(qiáng)制規(guī)定一...

    whinc 評論0 收藏0

發(fā)表評論

0條評論

miya

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<