Как работают погрузчики AMD под капотом?

Итак, я сейчас использовал require.js, но понял, что на самом деле я не знаю, как это работает под капотом. В нем говорится, что это загрузчик AMD.

Я понимаю, что CommonJS является синхронным, что означает, что он блокирует выполнение других кодов во время загрузки. С другой стороны, AMD является асинхронной. Здесь я запутался.

Когда я определяю модуль, он должен загрузить a, b, c для выполнения обратного вызова. Как работает асинхронная работа?

  • Разве это не синхронно, когда нужно сначала загрузить эти три зависимости?
  • Означает ли это, что AMD загружает a, b, c асинхронно, а затем проверяет, загружены ли эти файлы (не заботятся о заказе), а затем выполнить обратный вызов?
define("name",["a","b","c"], function(a,b,c){

});

Ответ 1

Как вы знаете, "AMD" (определение асинхронного модуля (AMD)) является специфическим API. Существует много совместимых с AMD "загрузчиков", включая RequireJS, curl.js и Dojo (среди прочих).

Подобно тому, как фреймворки, такие как JQuery и Dojo, предоставляют вам API через raw Javascript; программа, использующая AMD:

1) требуется библиотека, совместимая с AMD.js,

2) требует определенных программных "правил" и "условностей", а

3) В конечном итоге сидит "сверху" Javascript, который работает на вашем "Javascript engine" (будь то IE, Chrome, Firefox - что угодно).

Вот несколько ссылок, которые я нашел полезными:

PS: Чтобы ответить на ваш ближайший вопрос, последняя ссылка немного обсуждает "require()" и "dynamic -loaded dependencies".