javascript - 異步模塊的理解
問(wèn)題描述
對(duì)于同步模塊,模塊必須提前加載進(jìn)內(nèi)存中。對(duì)于異步模塊,比如說(shuō)他的實(shí)現(xiàn)requirejs,依賴(lài)前置,且提前執(zhí)行,這不也是提前加載進(jìn)內(nèi)存了嗎,那為什么說(shuō)是異步的?看了很多AMD和CMD的知識(shí),就是不太明白同步模塊加載和異步模塊加載的區(qū)別。
問(wèn)題解答
回答1:這個(gè)機(jī)制和【內(nèi)存】關(guān)系并不大,更多可以理解為【腳本的下載時(shí)機(jī)】。
前端的特殊性在于,腳本文件的體積和下載時(shí)間,會(huì)直接影響頁(yè)面性能。同步加載的規(guī)范中,所有依賴(lài)必須下載好后,腳本才能執(zhí)行。
而異步加載的規(guī)范中,只有代碼運(yùn)行到需要的位置時(shí),才會(huì)加載所需要的腳本。例如一個(gè)巨大的單頁(yè)應(yīng)用,首頁(yè)部分的腳本可以特別輕,而進(jìn)入某個(gè)功能頁(yè)時(shí),再異步加載需要的模塊,這樣對(duì)性能有很大的幫助。
回答2:requirejs的異步加載本質(zhì)上是在<head>里append需要異步加載的<script>,這些<script>元素都有async屬性來(lái)實(shí)現(xiàn)非阻塞異步加載。然后通過(guò)onload監(jiān)聽(tīng)各個(gè)腳本加載完成狀態(tài),來(lái)實(shí)現(xiàn)多個(gè)存在依賴(lài)關(guān)系的腳本先后加載次序??梢宰约河胊sync和onload實(shí)現(xiàn)簡(jiǎn)單的異步加載功能,但要實(shí)現(xiàn)requirejs這樣的功能,還是要花不少心思的。
相關(guān)文章:
1. javascript - node.js promise沒(méi)用2. golang - 用IDE看docker源碼時(shí)的小問(wèn)題3. yii2中restful配置好后在nginx下報(bào)404錯(cuò)誤4. 算法 - python 給定一個(gè)正整數(shù)a和一個(gè)包含任意個(gè)正整數(shù)的 列表 b,求所有<=a 的加法組合5. android 如何實(shí)現(xiàn)如圖中的鍵盤(pán)上的公式及edittext的內(nèi)容展示呢6. java - 我在用Struts2上傳文件時(shí),報(bào)以下錯(cuò)誤怎么回事?7. c++ - 如何正確的使用QWebEngineView?8. PHP注冊(cè)功能9. mysql - 求SQL語(yǔ)句10. MySQL如何實(shí)現(xiàn)表中再嵌套一個(gè)表?
