国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

高級(jí)定時(shí)器---《高程3》

miya / 2930人閱讀

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
the onlt one div

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/80610.html

相關(guān)文章

  • 高級(jí)時(shí)器---《高程3

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

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

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

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

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

    kidsamong 評(píng)論0 收藏0
  • 三張圖理解JS高級(jí)時(shí)器

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

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

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

    whinc 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

miya

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<