Bei synchronen Modulen muss das Modul vorab in den Speicher geladen werden.
Bei asynchronen Modulen ist die Implementierung von requirejs beispielsweise auf das Front-End angewiesen und wird nicht auch im Voraus in den Speicher geladen. Warum wird es dann als asynchron bezeichnet? Nachdem ich viel über AMD und CMD gelesen habe, verstehe ich den Unterschied zwischen synchronem Modulladen und asynchronem Modulladen nicht ganz.
這個機制和【內(nèi)存】關(guān)系并不大,更多可以理解為【腳本的下載時機】。
前端的特殊性在于,腳本文件的體積和下載時間,會直接影響頁面性能。同步加載的規(guī)范中,所有依賴必須下載好后,腳本才能執(zhí)行。
而異步加載的規(guī)范中,只有代碼運行到需要的位置時,才會加載所需要的腳本。例如一個巨大的單頁應(yīng)用,首頁部分的腳本可以特別輕,而進入某個功能頁時,再異步加載需要的模塊,這樣對性能有很大的幫助。
requirejs的異步加載本質(zhì)上是在<head>里append需要異步加載的<script>,這些<script>元素都有async屬性來實現(xiàn)非阻塞異步加載。然后通過onload監(jiān)聽各個腳本加載完成狀態(tài),來實現(xiàn)多個存在依賴關(guān)系的腳本先后加載次序??梢宰约河胊sync和onload實現(xiàn)簡單的異步加載功能,但要實現(xiàn)requirejs這樣的功能,還是要花不少心思的。