網(wǎng)上有不少講解瀏覽器事件循環(huán)機制的文章,主線程、任務(wù)隊列、微任務(wù)、宏任務(wù).....都說的大同小異! 單有一點還是不明白:瀏覽器具體是怎么實現(xiàn)的?首先!如果有事件發(fā)生(不管是網(wǎng)絡(luò)還是鼠標(biāo)事件...)這個事件需要先添加到任務(wù)隊列等待處理,那么問題來了,他是怎么把事件添加到隊列的?或者是說瀏覽器是怎么知道有事件發(fā)生了? 對于這點我的猜想是:也許所有異步的操作在有結(jié)果的時候都會調(diào)一個函數(shù)(不管是一個函數(shù)還是一個什么鬼,反正就是同一段代碼),這段代碼的作用就是通過各種計算最終把事件處理程序添加到任務(wù)隊列去....然后!瀏覽器是怎么執(zhí)行循環(huán)機制的?我的猜想有兩個:1、也許是通過事件來觸發(fā)循環(huán)檢查隊列的行為的,比如當(dāng)有一個異步事件到來,瀏覽器除了會調(diào)用我上面說的那段代碼放置事件處理程序之外,可能還會在放置后立馬觸發(fā)一次隊列檢查,如果有事件任務(wù)就立即取出執(zhí)行,2、這個就簡單暴力了,也許瀏覽器另開一個線程,這個線程里埋了個定時器,就是setInterval一樣,每隔1毫秒甚至0.5毫秒就去檢查一下任務(wù)隊列...! 但這樣好像很浪費資源!
關(guān)于瀏覽器事件循環(huán)具體實現(xiàn)?
慕田峪7331174
2019-02-03 22:49:12