javascript - 異步模塊的理解
問題描述
對(duì)于同步模塊,模塊必須提前加載進(jìn)內(nèi)存中。對(duì)于異步模塊,比如說他的實(shí)現(xiàn)requirejs,依賴前置,且提前執(zhí)行,這不也是提前加載進(jìn)內(nèi)存了嗎,那為什么說是異步的?看了很多AMD和CMD的知識(shí),就是不太明白同步模塊加載和異步模塊加載的區(qū)別。
問題解答
回答1:這個(gè)機(jī)制和【內(nèi)存】關(guān)系并不大,更多可以理解為【腳本的下載時(shí)機(jī)】。
前端的特殊性在于,腳本文件的體積和下載時(shí)間,會(huì)直接影響頁面性能。同步加載的規(guī)范中,所有依賴必須下載好后,腳本才能執(zhí)行。
而異步加載的規(guī)范中,只有代碼運(yùn)行到需要的位置時(shí),才會(huì)加載所需要的腳本。例如一個(gè)巨大的單頁應(yīng)用,首頁部分的腳本可以特別輕,而進(jìn)入某個(gè)功能頁時(shí),再異步加載需要的模塊,這樣對(duì)性能有很大的幫助。
回答2:requirejs的異步加載本質(zhì)上是在<head>里append需要異步加載的<script>,這些<script>元素都有async屬性來實(shí)現(xiàn)非阻塞異步加載。然后通過onload監(jiān)聽各個(gè)腳本加載完成狀態(tài),來實(shí)現(xiàn)多個(gè)存在依賴關(guān)系的腳本先后加載次序。可以自己用async和onload實(shí)現(xiàn)簡單的異步加載功能,但要實(shí)現(xiàn)requirejs這樣的功能,還是要花不少心思的。
相關(guān)文章:
1. html5 - angularjs中外部模版加載無法使用2. 在MySQL中新增字段時(shí),報(bào)錯(cuò)??3. 老哥們求助啊4. java - 安卓電視盒子取得了root權(quán)限但是不能安裝第三方應(yīng)用,請(qǐng)問該怎么辦?5. javascript - js 寫一個(gè)正則 提取文本中的數(shù)據(jù)6. npm鏡像站全新上線7. javascript - vue-router怎么不能實(shí)現(xiàn)跳轉(zhuǎn)呢8. css3 - 請(qǐng)問一下在移動(dòng)端CSS布局布局中通常需要用到哪些元素,屬性?9. python - 模擬滑動(dòng)驗(yàn)證碼,有源碼,求解10. 我的Apache卡在這里不動(dòng)了怎么辦?
