Asynkron moduldefinisjon
Asynkron moduldefinisjon ( AMD ) er et JavaScript - programmeringsgrensesnitt som gjør at moduler kan lastes asynkront og deres avhengighet. Det kartlegger dermed to grunnleggende konsepter for programvareutvikling, modularisering og gjenbruk, i det ellers funksjonelle og monolitiske JavaScript-miljøet. Modulariseringen tillater inndeling av en Javascript-applikasjon i individuelle underkomponenter, som kan utvikles og testes separat (del og erobre ). Takket være klare grensesnitt kan AMD-moduler brukes på nytt i andre programvareprosjekter.
Prosedyren er i stor grad basert på inversjon av kontroll - designmønster (IoC-mønster). Modulen tilsvarer begrepet bønne i IoC. Dette gjør at JavaScript kan bygges opp modulært. Resultatet er moduler som kan sammenlignes med Java - klasser er, og kan like utvides av arv. Hver modul må lagres i sin egen fil , analogt med Java-klassen .
Fordelene med modularisering er spesielt tydelige i nettlesermiljøet , der JavaScript brukes spesielt ofte. Bare de nødvendige modulene er lastet inn, ikke alt, slik det ville være tilfelle med synkron lasting. På den ene siden øker dette ytelsen til koden, og på den annen side gjør det feilsøking lettere , spesielt når det gjelder problemer på tvers av domener. Videre muliggjør det bedre gjenbrukbarhet av individuelle kodefragmenter uten å måtte transportere dem ved å kopiere og lime inn eller sammenkoble serveren . Dette resulterer i en reduksjon i bruken av globale variabler til et minimum og reduserer dermed problemene forårsaket av forurensning i navneområdet.
Spesifikasjonen for distribusjon av koden over mange individuelle filer har imidlertid også ulemper. Hver fil må av nettleseren i en egen HTTP- innkalling, som i mange små filer mye protokoll - overhead kan produsere. Dette kan føre til en merkbar forsinkelse , spesielt for forbindelser med høy ventetid . Imidlertid kan denne overhead når du henter frem forskjellige Javascript-filer kompenseres for ved å bruke en serversamling.
Ulike AMD-rammer eksisterer for å implementere AMD-formatet, for eksempel B. RequireJS , dojoen Loader eller curl.js .
forpliktelse
AMD-formatet gir en spesiell moduldefinisjon eller komponentdefinisjon som muliggjør erklæring og korrekt lasting av avhengigheter. Moduldefinisjonen er derfor basert på programmeringskonvensjoner. Denne konvensjonen har endret seg i mange fritt tilgjengelige Javascript-biblioteker, for eksempel B. jQuery eller Socket.IO håndheves.
define("Name des Moduls", ["Abhängigkeit1", "Abhängigkeit2"], factory);
Programkoden ovenfor illustrerer moduldefinisjonen i AMD-format. I tillegg til navnet på modulen og avhengighetene defineres en fabrikkmetode som modulen genereres gjennom. Denne fabrikkmetoden brukes til å instantiere komponenten og eksportere mulige grensesnittobjekter. Som det fremgår, kreves et Javascript-bibliotek for bruk av AMD-formatet, som tilbyr definisjonsmetoden og instantierer de forskjellige komponentene samt injiserer avhengighetene. I AMD-miljøet blir dette referert til som en AMD-laster. Fremgangsmåten tilsvarer i stor grad mønsteret til den abstrakte fabrikken og avhengighetsinjeksjonen med en IoC-beholder. På denne måten kan alle komponenter instantiseres, og de nødvendige avhengighetene kan leveres i riktig rekkefølge. De enkelte komponentene i en JS-applikasjon kan kobles fra hverandre.
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;
};
);