成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

實例分析javascript中的異步

瀏覽:95日期:2023-06-20 15:38:44

js 異步解析

一 、js單線程分析

我們都知道js的一大特點是單線程,也就是同一時間點,只能處理一件事,一句js代碼。那為什么js要設計成單線程而不是多線程呢?這主要和js的用途有關,js作為瀏覽器端的腳本語言,主要的用途為用戶與服務端的交互與操作dom。而操作dom就注定了js只能是單線程語言。假如js才取多線程將會出現,多個線程同時對一個dom進行操作的情況,瀏覽器將無法判斷如何渲染。不僅js是單線程,瀏覽器渲染dom也是單線程的,js的執行和瀏覽器渲染dom共用的一個線程,這就導致了在html代碼中書寫js代碼會造成瀏覽器端渲染的阻塞。例如:在html某個位置,寫一個段帶有alert(‘稍等’),alert 之前html已經被渲染出來,而alert之后的html被這段js阻塞了。為了利用多核CPU的計算能力,HTML5提出Web Worker標準,允許JavaScript腳本創建多個線程,但是子線程完 全受主線程控制,且不可進行DOM操作。所以,這個新標準并沒有改變JavaScript單線程的本質。

所謂的js單線程,是指在瀏覽器中JS引擎負責解釋和執行JavaScript代碼的線程只有一個。不妨叫它主線程。但是實際上瀏覽器處理js還存在其他的線程。例如:處理AJAX請求的線程、處理DOM事件的線程、定時器線程、讀寫文件的線程(例如在Node.js中)等等。這些線程可能存在于JS引擎之內,也可能存在于JS引擎之外,在此我們不做區分。不妨叫它們工作線程。

總結一下:js之所以才取單線程模式是為了避免DOM渲染沖突。而瀏覽器中執行js線程是單線程我們稱它為主線程,同時還存在其它處理js的線程,我們稱它為工作線程。js是單線程,但瀏覽器是多線程的。

二 、同步與異步

單線程就意味著,所有任務需要排隊,前一個任務結束,才會執行后一個任務。如果前一個任務耗時很長,后一個任務就不得不一直等著。這就是同步代碼阻塞。如果排隊是因為計算量大,CPU忙不過來,倒也算了,但是很多時候CPU是閑著的,因為IO設備(輸入輸出設備)很慢(比如Ajax操作從網絡讀取數據),不得不等著結果出來,再往下執行。JavaScript語言的設計者意識到,這時主線程完全可以不管IO設備,掛起處于等待中的任務,先運行排在后面的任務。等到IO設備返回了結果,再回過頭,把掛起的任務繼續執行下去。

簡單的說,同步就是會阻塞代碼的執行,而異步不會。同樣拿alert(’稍等’) 來舉例,在一段js代碼中加入一段alert,如果沒有點擊確認,此時代碼的執行就被阻塞了,大多數js代碼都是同步執行的。異步則相反。那為什么js中要引入異步的概念呢,很簡單,由于js的單線程,當遇到耗時的操作時如果采用同步的執行,那么我們就不可能看到如今這么流暢的web應用了。再舉個簡單的例子:在一條單行道上行駛著很多汽車,假如其中某一輛車出現機械故障,將會導致后面的車也無法通過,此時應該將故障的車拉入旁邊的應急車道進行修復,待它修好之后再重新駛入主干道中,不會影響主干道其它行駛的汽車。所以,異步是js單線程下解決耗時問題的一種“無可奈何”的解決方案。也是一種近乎完美的解決方案。

三、js異步與事件輪詢

事件輪詢(event loop)是js異步的實現方式。簡而言之,在js單線程中分為兩種任務,一種是同步任務(synchronous),另一種是異步任務(asynchronous)。同步任務指的是,在主線程上排隊執行的任務,只有前一個任務執行完畢,才能執行后一個任務;異步任務指的是,不進入主線程、而進入”任務隊列”(task queue)的任務,只有當主進程中所有同步任務執行完畢,且”任務隊列”通知主線程,某個異步任務可以執行了,該任務才會進入主線程執行。事件輪詢就是將主線程中的異步任務掛載到任務隊列中,再待到合的時機,將任務隊列中的異步函數拉到主進程來執行的這么一個流程。

js中異步操作主要有:

1、定時任務(setTimeout、setInterval)

2、網路請求(ajax、動態<img>加載)

3、事件綁定(click,focus,change等)

js異步具體執行流程分析

實例分析javascript中的異步

大家看一下左邊代碼,兩個console.log操作,兩個setTitmeout 操作。按照我們對異步的理解,在主線程中 console.log 為同步任務從上到下依次執行,所以在最先打印的是3,當執行到第一setTimeout時,瀏覽器js引擎會自動將setTimeout放入工作線程中。ps:在工作線程中,待0.1s后將setTimeout 的回調函數放入異步隊列中;主進程中下一個setTimeout ,但是它的延遲時間為0,這并不意味著它能同步執行,它依舊經歷如上兩個過程,從工作進程中,0s后放入任務隊列。接下來是執行console.log(3);當主進程中任務已經執行完畢。任務隊列中有一個監視器,隨時監視著主進程和任務隊列中的異步函數情況,當主進程執行完畢,就判斷任務隊列中是否有需要執行的函數,如果有就按照隊列現后順序依次放入主進程中,以此往復。

所以上面代碼,依次打印為:3,3,2,1。也就是先將非異步執行完,再回過頭來執行異步函數,異步函數執行順序為隊列規則,先進先出,也就是先進入隊列的異步函數將優先執行。

思考:如果一段代碼中現后存在一個ajax 和一個1s的定時函數,那么他們誰先執行呢? 答案是:不確定。因為不確定ajax請求完畢進入隊列的時間。小伙伴們可別被面試管套路了哦。哈哈。

四、前端異步的寫法

1、回調函數,也就是在setTimeout或者ajax中添加回調函數,待到指定時間后或者請求到數據后再執行回調。

2、ES6標準:Promise,ES7:async await 這兩種都只是js事件輪詢實現異步的一種優雅的 方式,將異步變為同步的寫法,但都并未改變js異步本質。

以上就是實例分析javascript中的異步的詳細內容,更多關于javascript 異步的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
91亚洲精品乱码久久久久久蜜桃| 色综合天天综合色综合av| 另类小说视频一区二区| 一本久久综合亚洲鲁鲁五月天 | 国产日韩欧美亚洲| 国产成人精品免费视频网站| 欧美日韩国产在线观看| 青青草97国产精品免费观看 | 亚洲免费观看| 自拍偷自拍亚洲精品播放| 97久久超碰精品国产| 欧美一级爆毛片| 狠狠色丁香久久婷婷综合_中| 日本精品一级二级| 香蕉成人啪国产精品视频综合网| 怡红院精品视频在线观看极品| 国产欧美日本一区二区三区| 99国产精品久久久久久久久久久| 欧美一区二区三区在| 国内久久精品视频| 欧美精品三级在线观看| 美国精品在线观看| 色狠狠色噜噜噜综合网| 三级欧美在线一区| 色综合久久精品| 亚洲成人av福利| 美女黄网久久| 青青草成人在线观看| 91成人在线精品| 日本美女一区二区三区视频| 国产三级精品三级| 成人看片黄a免费看在线| 欧美一区二区三区四区高清| 国产精品123| 91精品国产综合久久婷婷香蕉| 国产剧情av麻豆香蕉精品| 这里只有精品视频在线观看| 激情小说欧美图片| 欧美精品v国产精品v日韩精品| 国产一区二区成人久久免费影院| 在线播放视频一区| 成人午夜免费电影| 久久精品人人做人人综合| 欧美福利影院| 在线观看亚洲精品视频| 日本大胆欧美人术艺术动态| 欧美视频一区二区三区四区| 麻豆91在线播放免费| 91麻豆精品91久久久久同性| 成人福利在线看| 久久久不卡网国产精品二区| 国产在线精品一区二区中文| 亚洲激情中文1区| 久久国产手机看片| 精品一区二区三区欧美| 欧美大片日本大片免费观看| 欧美日韩在线高清| 一区二区三区精品视频在线| 久久综合电影| 久久99久久99| 日韩一区二区三免费高清| 91在线视频免费91| 亚洲色图欧洲色图婷婷| 色哟哟一区二区在线观看| 国产精品一品二品| 国产日韩欧美精品电影三级在线| 亚洲第一黄网| 水野朝阳av一区二区三区| 精品视频在线免费看| 国产91精品一区二区麻豆网站| 欧美国产精品一区二区三区| 夜夜夜久久久| 久久成人免费网站| 国产无遮挡一区二区三区毛片日本| 国模精品娜娜一二三区| 亚洲永久精品大片| 欧美日韩精品欧美日韩精品| 91在线免费播放| 亚洲一区视频在线| 欧美电影一区二区| 欧美性色综合| 视频一区二区三区入口| 日韩午夜在线影院| 伊人成人在线| 久久97超碰色| 国产女主播一区| 久久福利电影| 成人高清在线视频| 一区二区国产盗摄色噜噜| 精品1区2区3区| k8久久久一区二区三区| 一区二区三区美女| 91精品在线免费观看| 黑人巨大精品欧美一区二区小视频 | 青青草国产成人99久久| xf在线a精品一区二区视频网站| 99精品国产福利在线观看免费 | 自拍偷拍国产精品| 欧美丝袜丝nylons| 欧美一区国产在线| 日本三级亚洲精品| 久久久久久99精品| 色综合久久久久久久久| 欧美二区视频| 麻豆国产精品官网| 欧美激情综合在线| 在线欧美小视频| 欧美日韩一区二区三区在线观看免| 天堂蜜桃91精品| 久久综合九色综合97婷婷女人| 国产精品视区| 99久久综合99久久综合网站| 亚洲bt欧美bt精品| 精品国产一区二区精华| 亚洲一区久久| 五月天一区二区| 精品成a人在线观看| 日本韩国精品在线| 亚洲午夜久久久久久尤物| 韩国成人在线视频| 一区二区三区精品视频在线| 日韩欧美国产小视频| 蜜桃久久精品乱码一区二区| 91碰在线视频| 精品一区二区三区免费视频| 亚洲黄网站在线观看| 精品久久久久久综合日本欧美| 久久国产精品毛片| 国内精品国语自产拍在线观看| 国内精品伊人久久久久av一坑| 一区二区三区中文字幕电影| 久久综合久久鬼色中文字| 欧美综合欧美视频| 国产欧美日韩亚洲| 午夜精品亚洲一区二区三区嫩草| 最好看的中文字幕久久| 日韩色视频在线观看| 久久久综合网| 亚洲精品乱码| 9i看片成人免费高清| 久久91精品久久久久久秒播| 一区二区三国产精华液| 中文字幕欧美区| 精品入口麻豆88视频| 欧美性感一区二区三区| 国产精品xvideos88| 丁香婷婷综合色啪| 日本91福利区| 亚洲人妖av一区二区| 久久久不卡网国产精品一区| 91精品黄色片免费大全| 欧美天堂一区二区三区| 久久精品免费| 在线视频成人| 欧美一区视频| proumb性欧美在线观看| 粉嫩在线一区二区三区视频| 免费美女久久99| 亚洲国产综合色| 亚洲人成网站影音先锋播放| 26uuu亚洲| 日韩欧美中文一区二区| 欧美美女一区二区| 欧美在线小视频| 色综合av在线| 久久动漫亚洲| 国产日韩欧美三区| 亚洲免费激情| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美精品国产一区二区| 91啪在线观看| 欧美 亚欧 日韩视频在线| heyzo一本久久综合| 懂色av一区二区三区蜜臀| 国产精品影音先锋| 老司机精品视频一区二区三区| 日本亚洲视频在线| 人妖欧美一区二区| 欧美aaa在线| 麻豆国产精品一区二区三区| 美女视频一区在线观看| 日本亚洲天堂网| 毛片基地黄久久久久久天堂| 免费欧美日韩国产三级电影| 日本91福利区| 久久国内精品自在自线400部| 麻豆精品视频在线观看视频| 卡一卡二国产精品| 国产一本一道久久香蕉| 国产酒店精品激情| 国产激情偷乱视频一区二区三区| 国产成人精品一区二| 成人99免费视频| 91亚洲国产成人精品一区二区三| 91丝袜高跟美女视频| 欧美日韩网址| 亚洲国产美女 | 亚洲麻豆视频| 免费欧美日韩| 欧洲亚洲国产日韩|