亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

script標簽的defer 問題?

script標簽的defer 問題?

開心每一天1111 2019-05-25 14:20:27
標簽有defer和async屬性,defer屬性標注的腳本會被異步下載但是不會被執行,直到文檔的載入和解析完成,并可以操作,腳本才會被執行。這個異步下載是js主線程做的,還是頁面渲染的線程做的?
查看完整描述

2 回答

?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

在瀏覽器中,JavaScript是單線程的,并且和UI渲染共用一個線程。
加個引用更有說服力,出自于最新版《深入淺出Nodejs》48頁第三句。我也看到有資料說,JavaScript線程和UI渲染都是瀏覽器線程,但因為它們互斥,所以只能串行。不知道那種說法是正確的。
對于defer和anync的異步加載我也有疑惑,所以我查找到這個資料:
HTML5提出了WebWorker,它會在當前JavaScript的執行主線程中利用Worker類新開辟一個額外的線程來加載和運行特定的JavaScript文件,這個新的線程和JavaScript的主線程之間并不會互相影響和阻塞執行。
                            
查看完整回答
反對 回復 2019-05-25
?
鴻蒙傳說

TA貢獻1865條經驗 獲得超7個贊

1:JS引擎線程和UI[主]線程是互斥關系,而不是在同一個線程,具體可查詢線程互斥的概念。
很顯然的,js引擎大部分都以虛擬機的概念存在,不大可能跟上層應用公用線程。(個人猜測)
2:在任何一種面向用戶的程序設計里面,I/O放在主線程同步都是一種無知的行為。場景假設:
如果瀏覽器的網絡資源請求線程都安排在主線程,那sry,你這張圖片下載完成之前,瀏覽器是卡死的。很顯然現代瀏覽器都不這么二,所以,網絡請求應該不是在UI[主]線程。
3:是HTML標準,在早期的時候,還有JScript,VBScript等,而它配備的配置(屬性)是標準里面定義用來告訴瀏覽器怎么處理這個標簽的。
defer和async屬性都是告訴瀏覽器,這里面的內容你不要等待,你繼續~;否則,瀏覽器默認情況是要等這里面的內容下載完成后轉交給JS線程執行在繼續往下解析。
4:WebComponent
5:可以了解下客戶端的知識,不要局限于純前端,你提這問題,稍微有點客戶端領域的知識的話,不看任何資料都能猜出個大該。
                            
查看完整回答
反對 回復 2019-05-25
  • 2 回答
  • 0 關注
  • 333 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號