鍍金池/ 問(wèn)答/HTML/ 網(wǎng)頁(yè)在script標(biāo)簽下載過(guò)程中(同步),會(huì)阻塞css渲染嘛?

網(wǎng)頁(yè)在script標(biāo)簽下載過(guò)程中(同步),會(huì)阻塞css渲染嘛?

請(qǐng)教個(gè)問(wèn)題,網(wǎng)頁(yè)在打開的時(shí)候,當(dāng)script標(biāo)簽處于下載過(guò)程中(同步),此時(shí)會(huì)阻塞css渲染嘛?

我用chorome 調(diào)試工具測(cè)試下來(lái)貌似不會(huì)?

clipboard.png

回答
編輯回答
伐木累

不會(huì),瀏覽器是多線程的。

瀏覽器的內(nèi)核是多線程的,它們?cè)趦?nèi)核制控下相互配合以保持同步,一個(gè)瀏覽器至少實(shí)現(xiàn)三個(gè)常駐線程:

javascript引擎線程 javascript引擎是基于事件驅(qū)動(dòng)單線程執(zhí)行的,JS引擎一直等待著任務(wù)隊(duì)列中任務(wù)的到來(lái),然后加以處理,瀏覽器無(wú)論什么時(shí)候都只有一個(gè)JS線程在運(yùn)行JS程序。

GUI渲染線程 GUI渲染線程負(fù)責(zé)渲染瀏覽器界面,當(dāng)界面需要重繪(Repaint)或由于某種操作引發(fā)回流(reflow)時(shí),該線程就會(huì)執(zhí)行。但需要注意GUI渲染線程與JS引擎是互斥的,當(dāng)JS引擎執(zhí)行時(shí)GUI線程會(huì)被掛起,GUI更新會(huì)被保存在一個(gè)隊(duì)列中等到JS引擎空閑時(shí)立即被執(zhí)行。

瀏覽器事件觸發(fā)線程 事件觸發(fā)線程,當(dāng)一個(gè)事件被觸發(fā)時(shí)該線程會(huì)把事件添加到“任務(wù)隊(duì)列”的隊(duì)尾,等待JS引擎的處理。這些事件可來(lái)自JavaScript引擎當(dāng)前執(zhí)行的代碼塊如setTimeOut、也可來(lái)自瀏覽器內(nèi)核的其他線程如鼠標(biāo)點(diǎn)擊、AJAX異步請(qǐng)求等,但由于JS是單線程執(zhí)行的,所有這些事件都得排隊(duì)等待JS引擎處理。

2017年6月1日 22:08