Определение асинхронного модуля

Определение Асинхронного модуля ( AMD ) является JavaScript - интерфейс программирования , который позволяет модули могут быть загружены асинхронно и их зависимость. Таким образом, он отображает две фундаментальные концепции разработки программного обеспечения, модульность и повторное использование, в функциональной и монолитной среде JavaScript. Модульность позволяет разделить приложение Javascript на отдельные подкомпоненты, которые можно разрабатывать и тестировать отдельно (разделяй и властвуй ). Благодаря понятным интерфейсам модули AMD можно повторно использовать в других программных проектах.

Процедура в значительной степени основана на инверсии шаблона управления - проектирования (шаблон IoC). Модуль соответствует термину bean в IoC. Это позволяет строить JavaScript по модульному принципу. В результате получаются модули, сравнимые с Java - классы есть и могут быть расширены путем наследования. Каждый модуль должен быть сохранен в отдельном файле - аналогично классу Java .

Преимущества модульности особенно очевидны в среде браузера , где JavaScript используется особенно часто. Загружаются только необходимые модули, а не все, как в случае с синхронной загрузкой. С одной стороны, это увеличивает производительность кода, а с другой - упрощает отладку , особенно в случае проблем междоменного доступа. Кроме того, он обеспечивает лучшую возможность повторного использования отдельных фрагментов кода без необходимости их транспортировки путем копирования и вставки или объединения на стороне сервера . Это приводит к сокращению использования глобальных переменных до минимума и, таким образом, значительно снижает проблемы, вызванные загрязнением пространства имен.

Однако спецификация распределения кода по множеству отдельных файлов также имеет недостатки. Каждый файл должен браузером в отдельном HTTP вызов нагрузки, которая во многих маленьких файлов много протокольных - накладные расходы могут производить. Это может привести к заметной задержке , особенно для соединений с большой задержкой . Однако эти накладные расходы при вызове различных файлов Javascript можно компенсировать, используя пакетирование на стороне сервера.

Существуют различные платформы AMD для реализации формата AMD, такие как Б. RequireJS , додзё погрузчик или curl.js .

обязательство

Формат AMD предоставляет специальное определение модуля или определение компонента, которое позволяет декларировать и корректно загружать зависимости. Поэтому определение модуля основано на соглашениях о программировании. Это соглашение было изменено во многих свободно доступных библиотеках Javascript, таких как Б. Применение jQuery или Socket.IO .

define("Name des Moduls", ["Abhängigkeit1", "Abhängigkeit2"], factory);

Приведенный выше программный код иллюстрирует определение модуля в формате AMD. Помимо имени модуля и зависимостей, определяется фабричный метод, с помощью которого создается модуль. Этот фабричный метод используется для создания экземпляра компонента и экспорта возможных интерфейсных объектов. Как можно видеть, для использования формата AMD требуется библиотека Javascript, которая предлагает метод определения и создает экземпляры различных компонентов, а также вводит зависимости. В среде AMD это называется загрузчиком AMD. Процедура в значительной степени соответствует шаблону абстрактной фабрики и внедрению зависимости с контейнером IoC. Таким образом можно создать экземпляры любых компонентов и предоставить необходимые зависимости в соответствующем порядке. Отдельные компоненты JS-приложения могут быть отделены друг от друга.

define('PieChartModule', ['area', 'graph'], 
      function ( area, graph ) { 
          // Beschreibung des Plot-Modules
          var plotModuleExport = {
             plot: function(width, height, data){
	       // Einfache Nutzung der Module “graph” und “area”
               return graph.drawPie(area.randomGrid(width, height), data);
             }        
          };
          return plotModuleExport;
      };
);

веб ссылки

Индивидуальные доказательства

  1. https://docs.jboss.org/author/display/GTNPORTAL34/GDG-Asynchronous+Module+Definition
  2. http://docs.weejot.com/developer/reference/amd.html
  3. https://github.com/amdjs/amdjs-api/wiki/AMD
  4. http://tomdale.net/2012/01/amd-is-not-the-answer/
  5. http://requirejs.org/docs/api.html