Definicja modułu asynchronicznego

Definicja moduł asynchroniczny ( AMD ) jest JavaScript - interfejs programowania , który umożliwia moduły mogą być ładowane asynchronicznie i ich zależności. W ten sposób odwzorowuje dwie podstawowe koncepcje tworzenia oprogramowania, modularyzacji i ponownego wykorzystania w funkcjonalnym i monolitycznym środowisku JavaScript. Modularyzacja pozwala na podział aplikacji Javascript na poszczególne podkomponenty, które mogą być oddzielnie rozwijane i testowane (dziel i rządź ). Dzięki przejrzystemu interfejsowi moduły AMD mogą być ponownie wykorzystywane w innych projektach oprogramowania.

Procedura w dużej mierze opiera się na odwróceniu wzorca sterowanie - projekt (wzorzec IoC). Moduł odpowiada terminowi fasola w IoC. Umożliwia to modułowe budowanie JavaScript. W rezultacie powstają moduły, które są porównywalne do Javy - klasy są i mogą być tak samo rozszerzane przez dziedziczenie. Każdy moduł musi być zapisany we własnym pliku , analogicznie do klasy Java .

Zalety modularyzacji są szczególnie widoczne w środowisku przeglądarki , w którym JavaScript jest używany szczególnie często. Ładowane są tylko wymagane moduły, a nie wszystko, jak miałoby to miejsce w przypadku ładowania synchronicznego. Z jednej strony zwiększa to wydajność kodu, az drugiej strony ułatwia debugowanie , szczególnie w przypadku problemów z dostępem między domenami. Ponadto umożliwia lepszą możliwość ponownego wykorzystania poszczególnych fragmentów kodu bez konieczności ich przenoszenia przez kopiowanie i wklejanie lub konkatenację po stronie serwera . Skutkuje to ograniczeniem użycia zmiennych globalnych do minimum, a tym samym znacznie zmniejsza problemy spowodowane zanieczyszczeniem przestrzeni nazw.

Jednak specyfikacja dystrybucji kodu w wielu pojedynczych plikach ma również wady. Każdy plik musi przez przeglądarkę w oddzielnym HTTP inwokacji obciążenia, które w wielu małych plików znacznie protokołu - overhead może produkować. Może to prowadzić do zauważalnego opóźnienia , szczególnie w przypadku połączeń z dużym opóźnieniem . Jednak ten narzut związany z wywoływaniem różnych plików Javascript można skompensować za pomocą pakietowania po stronie serwera.

Istnieją różne struktury AMD do implementacji formatu AMD, takie jak B. RequireJS , dojo Loader lub curl.js .

zaangażowanie

Format AMD zapewnia specjalną definicję modułu lub definicję komponentu, która umożliwia deklarację i prawidłowe ładowanie zależności. Dlatego definicja modułu opiera się na konwencjach programowania. Konwencja ta uległa zmianie w wielu swobodnie dostępnych bibliotekach Javascript, takich jak B. Wymuszone jQuery lub Socket.IO .

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

Powyższy kod programu ilustruje definicję modułu w formacie AMD. Oprócz nazwy modułu i zależności definiowana jest metoda fabryczna, za pomocą której moduł jest generowany. Ta metoda fabryczna służy do tworzenia wystąpienia komponentu i eksportowania możliwych obiektów interfejsu. Jak widać, do korzystania z formatu AMD wymagana jest biblioteka Javascript, która oferuje metodę definiowania i tworzy instancje różnych komponentów, a także wstrzykuje zależności. W środowisku AMD jest to określane jako moduł ładujący AMD. Procedura w dużej mierze odpowiada wzorowi fabryki abstrakcyjnej i iniekcji zależności z kontenerem IoC. W ten sposób można utworzyć instancje dowolnych komponentów i zapewnić wymagane zależności w odpowiedniej kolejności. Poszczególne komponenty aplikacji JS można odsprzęgnąć od siebie.

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;
      };
);

linki internetowe

Indywidualne dowody

  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