2012-04-15 3 views
2

Что касается AMD (Asynchronous Module Definition) я прочитал фазу, как это:AMD: Какова цель в контексте javascript?

Формат AMD приходит от желания формата модуля, который был лучше, чем сегодняшних «писать кучу скриптов тегов с неявными зависимостями, вас необходимо вручную заказать "и что-то, что было легко использовать непосредственно в браузере.

Какова цель в контексте javascript? Можете ли вы привести пример? pro et contro использования AMD?

ответ

5

Обычно для библиотек Javascript, которые зависят друг от друга, требуется, чтобы они были загружены в определенном порядке. Например, тег скрипта, который включает библиотеку jQuery, должен появиться перед тегом скрипта, который включает библиотеку пользовательского интерфейса jQuery.

Если библиотеки использовались AMD, они могут быть включены в любом порядке. Библиотека AMD позаботится о том, чтобы инициализировать библиотеки в правильном порядке, потому что вы указываете, какая библиотека зависит от них.

(Немного иронично, тег скрипт, который включает в себя библиотеку AMD, конечно, должен прийти перед кодом, которые включают любые библиотеки, используя AMD ...)

5

JavaScript выполняется в порядке, они определены на странице (хотя они могут загружаться в любом порядке). Это означает, что перед выполнением этой операции должен быть загружен любой сценарий, требуемый некоторой операцией. Предположим, вы выполняете функцию, скрипт, содержащий эту функцию, должен быть загружен перед скриптом, который его использует. Теперь проблема заключается в том, что вы должны знать порядок загрузки этих скриптов, иначе ошибочно упорядоченный скрипт приведет к сбою всего приложения.

Перед тем, как AMD, давайте поговорим о модулях. Как и в мире Linux, программе нужны другие библиотеки для работы (называемые зависимостями). И чтобы эти программы работали, зависимости должны быть загружены вместе с программой, которую вы действительно хотели. Точно так же и во всех веб-приложениях сегодня. Они построены из нескольких простых библиотек, таких как jQuery, Backbone и т. Д. Но как вы справляетесь с ними без лидера кольца?

Здесь поступает AMD. AMD - спецификация для загрузчиков модулей (вроде как менеджеров зависимостей для программ). Они находят зависимости модуля, загружают их перед загрузкой фактического модуля, который вы хотите запустить.

Предположим, что для моего приложения требуется jQuery, jQuery UI, BackboneJS. Драйвер загрузчика AMD гарантирует, что эти 3 загрузятся до того, как мой код начнет их использовать, и без использования кучи скриптовых тегов перед вашим фактическим кодом.

На самом деле вам нужен только один тег сценария на странице - загрузчик сценариев. И с загрузчиками, такими как RequireJS, он только находит ваш «главный скрипт», выполняет его, и все автоматически загружает остальное с этой точки.


Грубый пример, как это:

//all you need in the page is your script loader 

<script data-main-script="path_to_main_script" src="scriptloader.js"></script> 

//then in the main script, you have this code which loads the set of 
//dependencies before calling the callback. 

require(['jQuery','underscore'],function($,_){ 
    //i am now sure that in here, i have access to jQuery ($) and underscore (_) 
} 

//example, we define an ajax module that needs jQuery 
//we load jQuery as our dependency 

define(['jQuery'],function($){ 
    //we can now use jQuery for our ajax module 
} 
+0

в требуют ([ 'Подчеркивание' 'JQuery'], функция ($ _) {} - А JQuery и подчеркивание загруженная в том, что Если функция в подчеркивании использует jQuery, будет ли она работать должным образом? –

+0

@AnkurMarwaha В этом случае подчеркивание _depends_ на jQuery. Подчеркивание должно определять jQuery как его зависимость для загрузки jQuery. Это не ваш код, который должен будьте обеспокоены этим. Кроме того, зависимости в этом массиве не загружаются и не выполняются в этом порядке. – Joseph

 Смежные вопросы

  • Нет связанных вопросов^_^