伊人99re_av日韩成人_91高潮精品免费porn_色狠狠色婷婷丁香五月_免费看的av_91亚色网站

中培偉業(yè)IT資訊頻道
您現(xiàn)在的位置:首頁 > IT資訊 > 軟件研發(fā) > JavaScript中的事件循環(huán)概念和異步開發(fā)

JavaScript中的事件循環(huán)概念和異步開發(fā)

2021-05-28 16:43:43 | 來源:中培企業(yè)IT培訓(xùn)網(wǎng)

當(dāng)只需要一個(gè)簡單的工作界面時(shí),JavaScript就很容易滿足需求。當(dāng)界面變得更加復(fù)雜時(shí),問題就開始了。在這里,需要對(duì)JavaScript有更深入的了解。重要的是,即使大型且復(fù)雜的界面也要保持快速和響應(yīng)。響應(yīng)性通常是通過使用異步功能來實(shí)現(xiàn)的。這意味著可以讓代碼同時(shí)執(zhí)行多項(xiàng)操作,而無需停止或阻塞主線程。在本文中,將嘗試盡可能簡單地告訴有關(guān)JJavaScript中的事件循環(huán)概念和異步開發(fā)。開始學(xué)習(xí)JS時(shí),看起來似乎很艱巨,但實(shí)際上,一切都變得簡單得多。

事件循環(huán)如何工作?

事件循環(huán)是每個(gè)JavaScript開發(fā)人員以一種或另一種方式遇到的事情之一。JavaScript提供了一個(gè)基于事件循環(huán)的并發(fā)模型,該循環(huán)執(zhí)行代碼,收集和處理事件以及執(zhí)行排隊(duì)的子任務(wù)。

讓我們看一個(gè)設(shè)置超時(shí)的例子:

我認(rèn)為不難猜測這些日志將以什么順序調(diào)用。讓我們檢查一下。

但是,讓我們看一下引擎蓋下發(fā)生的事情。在示例中,我正在使用這個(gè)有用的網(wǎng)站

程序啟動(dòng)時(shí),它將遍歷代碼行。當(dāng)遇到異步操作時(shí),解釋器將此操作引發(fā)到調(diào)用堆棧中。在堆棧中,它開始看起來像是某個(gè)設(shè)置的超時(shí)時(shí)間,并且看起來像是瀏覽器API。然后,它拋出設(shè)置超時(shí),并在Web API中注冊(cè)了一些匿名函數(shù),當(dāng)瀏覽器在5000秒后完成設(shè)置超時(shí)時(shí),將執(zhí)行該匿名函數(shù)。接下來,匿名函數(shù)進(jìn)入回調(diào)隊(duì)列。隊(duì)列中運(yùn)行無限循環(huán),循環(huán)遍歷其元素,如果檢測到函數(shù)準(zhǔn)備就緒,則會(huì)將其扔回到調(diào)用堆棧中并執(zhí)行。

因此,我們不會(huì)阻止代碼的工作。我們不僅在談?wù)撛O(shè)置超時(shí),而且在談?wù)撈渌惒讲僮鳎缗c服務(wù)器一起工作的事件偵聽器。

但是,如果將0作為第二個(gè)參數(shù)傳遞給超時(shí)集,會(huì)發(fā)生什么情況呢?一模一樣。讓我們來看看。

瀏覽器仍會(huì)將功能拖放到Web API中,并且程序?qū)⒗^續(xù)運(yùn)行。

讓我們也看看事件監(jiān)聽器是如何工作的。

如上所述,事件偵聽器也是一個(gè)異步事件,并轉(zhuǎn)到Web API。現(xiàn)在,您了解了取消訂閱事件的重要性。

宏任務(wù)

讓我們以相同的事件示例為例,嘗試單擊幾次按鈕。

我們看到了事件隊(duì)列。這是宏任務(wù)回調(diào)隊(duì)列,一個(gè)v8術(shù)語。根據(jù)先進(jìn)先出規(guī)則執(zhí)行隊(duì)列中的任務(wù)。

讓我們注意兩個(gè)細(xì)節(jié):

1.在引擎執(zhí)行任務(wù)期間,頁面的渲染永遠(yuǎn)不會(huì)發(fā)生。任務(wù)花費(fèi)多長時(shí)間都沒有關(guān)系。僅在任務(wù)完成后才呈現(xiàn)對(duì)DOM的更改。

2.如果任務(wù)花費(fèi)很長時(shí)間并且瀏覽器無法執(zhí)行其他任務(wù)或處理用戶事件。因此,一段時(shí)間后,瀏覽器為您提供了“殺死”長期運(yùn)行的任務(wù)的功能。當(dāng)腳本包含大量復(fù)雜的計(jì)算或?qū)е聼o限循環(huán)的錯(cuò)誤時(shí),這是??可能的。

微型任務(wù)

我們可以在最后一個(gè)示例中看到微任務(wù)。執(zhí)行宏任務(wù)時(shí),宏任務(wù)中的函數(shù)將被放置在調(diào)用堆棧中。直到微任務(wù)在那里完成之后,新的宏任務(wù)才開始執(zhí)行。

多虧了JavaScript,我們可以編寫異步應(yīng)用程序而無需考慮數(shù)據(jù)完整性和數(shù)據(jù)一致性之類的多線程。如果我們要執(zhí)行耗時(shí)的操作,例如查詢數(shù)據(jù)庫并使用結(jié)果填充模板,則最好將其從主線程中推出并異步執(zhí)行任務(wù)。我們通過大量的回調(diào)和持續(xù)的上下文丟失來彌補(bǔ)這些好處。

根據(jù)任務(wù)的具體情況,可能會(huì)發(fā)現(xiàn)您將使用異步/等待,回調(diào)或不同技術(shù)的某種混合。實(shí)際上,選擇哪種異步開發(fā)方法的問題的答案取決于項(xiàng)目的具體情況。如果某種方法允許您使用易于維護(hù)的可讀代碼來解決問題,而其他團(tuán)隊(duì)成員也可以輕松理解,那么您就需要這種方法。

上述就是關(guān)于JavaScript中的事件循環(huán)概念和異步開發(fā)的全部內(nèi)容,想了解更多關(guān)于JavaScript開發(fā)的信息,請(qǐng)繼續(xù)關(guān)注中培偉業(yè)。

標(biāo)簽: JavaScript 軟件研發(fā)
主站蜘蛛池模板: 四虎亚洲精品私库AV在线 | 国产一区二区精品久久 | 亚洲午夜无码毛片AV久久京东热 | 久久国产精品99久久久久久老狼 | 伊人伊成久久人综合网996 | 国产福利写真片视频在线 | 精品无码人妻被多人侵犯AV | 两口子交换真实刺激高潮 | 狠狠干免费 | 16p亚洲 | 在线观看免费国产视频 | 久久er精品 | 青青草视频播放器 | 国产成人精品久久二区二区 | 高清国产在线一区 | 九九精品热播 | 国产456| 亚洲欧洲日韩在线 | 国产精品成人精品久久久 | 国产桃色视频 | 国产cao视频在线观看 | 国产熟妇高潮呻吟喷水 | 国产卡一卡二卡三高清 | 国产亚洲欧美日韩夜色凹凸成人 | 久久综合狠狠综合久久激情 | 香蕉视频污污在线观看 | 2017AV天堂网 | 久久精品视频免费观看 | 77777五月色婷婷丁香视频 | 久久久亚洲精品动漫无码 | 一本一道波多野结衣av黑人 | JAPANESE日本爆乳巨大 | 日韩人妻中文无码一区二区七区 | 亚洲精品卡一卡三卡四卡乱码 | 欧美网站一区二区三区 | www.日韩三级 | 久久国产精品色av免费观看 | 欧美精产国品一二三区 | 亚洲AV无码国产丝袜在线观看 | 伊人无码一区二区三区 | 亚洲精品tv久久久久久久久 |