Definition af asynkront modul

Asynkron moduldefinition ( AMD ) er en JavaScript - programmeringsgrænseflade, der gør det muligt at indlæse moduler asynkront og deres afhængighed. Det kortlægger således to grundlæggende begreber softwareudvikling, modulering og genbrug i det ellers funktionelle og monolitiske JavaScript-miljø. Modulariseringen tillader opdeling af en Javascript-applikation i individuelle underkomponenter, som kan udvikles og testes separat (opdele og erobre ). På grund af klare grænseflader kan AMD-moduler genbruges i andre softwareprojekter.

Proceduren er stort set baseret på inversionen af ​​kontrol - designmønster (IoC mønster). Modulet svarer til udtrykket bønne i IoC. Dette gør det muligt at opbygge JavaScript modulært. Resultatet er moduler, der kan sammenlignes med Java - klasser er og kan lige så udvides ved arv. Hvert modul skal gemmes i sin egen fil - analogt med Java-klassen .

Fordelene ved modularisering er især tydelige i browsermiljøet , hvor JavaScript bruges særligt ofte. Kun de krævede moduler er indlæst, ikke alt, som det ville være tilfældet med synkron belastning. På den ene side øger dette kodens ydeevne og på den anden side gør fejlretning lettere , især i tilfælde af adgangsproblemer på tværs af domæner. Desuden muliggør det en bedre genanvendelighed af individuelle kodefragmenter uden at skulle transportere dem ved at kopiere og indsætte eller server-side sammenkædning . Dette resulterer i en reduktion i brugen af globale variabler til et minimum og reducerer således betydeligt problemerne forårsaget af navneområdet forurening.

Specifikationen af ​​distributionen af ​​koden over mange individuelle filer har imidlertid også ulemper. Hver fil skal af browseren i en separat HTTP- indlæsning, som i mange små filer meget protokol - overhead kan producere. Dette kan føre til en mærkbar forsinkelse , især for forbindelser med høj latenstid . Denne overhead, når du kalder forskellige Javascript-filer op, kan imidlertid kompenseres for ved hjælp af en bundtning på serversiden.

Der findes forskellige AMD-rammer til implementering af AMD-formatet, f.eks B. RequireJS , The Dojo Loader eller curl.js .

forpligtelse

AMD-formatet giver en særlig moduldefinition eller komponentdefinition, der muliggør erklæring og korrekt indlæsning af afhængigheder. Moduldefinitionen er derfor baseret på programmeringskonventioner. Denne konvention er ændret i mange frit tilgængelige Javascript-biblioteker, såsom B. jQuery eller Socket.IO håndhæves.

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

Programkoden ovenfor illustrerer moduldefinitionen i AMD-format. Ud over navnet på modulet og afhængighederne defineres en fabriksmetode, via hvilken modulet genereres. Denne fabriksmetode bruges til at instantiere komponenten og eksportere mulige interfaceobjekter. Som det kan ses, kræves et Javascript-bibliotek til brug af AMD-formatet, som tilbyder definitionsmetoden og instantierer de forskellige komponenter og injicerer afhængighederne. I AMD-miljøet omtales dette som en AMD-loader. Proceduren svarer stort set til mønsteret for den abstrakte fabrik og afhængighedsinjektionen med en IoC-beholder. På denne måde kan alle komponenter instantieres, og de krævede afhængigheder kan leveres i den rette rækkefølge. De enkelte komponenter i en JS-applikation kan afkobles fra hinanden.

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

Weblinks

Individuelle beviser

  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