在網上發現了一篇很好的博客文章,對瀏覽器進程線程、Web Workers、Event Loop 等都解釋得通俗易懂。在此,我根據其內容作了幾張思惟導圖,對照着文章看可加深理解。若有更好的理解,歡迎探討。
博客地址是: http://www.dailichun.com/2018...css
在系統的任務管理器中能夠查看當前正在運行的各類進程。
打開 chrome 的任務管理器,能夠看到當前瀏覽器裏的進程。在這裏瀏覽器應該也有本身的優化機制,有時候打開多個tab頁後,能夠在Chrome任務管理器中看到,有些進程被合併了,以下圖:html
請牢記,瀏覽器的渲染進程是多線程的chrome
本質上就是進程和線程的區別。SharedWorker由獨立的進程管理,WebWorker只是屬於render進程下的一個線程promise
簡單版:瀏覽器
複雜版:
網絡
檢驗是否理解事件循環,不依靠控制檯,猜一下下面的結果:數據結構
提示: async 會返回 Promise 對象; await 會等待 Promise 對象完成,期間會讓出線程。
async function async1(){ console.log('async1 start') await async2() console.log('async1 end') } async function async2(){ console.log('async2') } console.log('script start') setTimeout(function(){ console.log('setTimeout') },0) async1(); new Promise(function(resolve){ console.log('promise1') resolve(); }).then(function(){ console.log('promise2') }) console.log('script end')
再看看修改版的結果會是啥:多線程
async function async1(){ console.log('async1 start') await async2() console.log('async1 end') } function async2(){ // 去掉了 async 關鍵字 console.log('async2'); } console.log('script start') setTimeout(function(){ console.log('setTimeout') },0) async1(); new Promise(function(resolve){ console.log('promise1') resolve(); }).then(function(){ console.log('promise2') }) console.log('script end')