Definirea modulului asincron

Definiție modul asincronă ( AMD ) este un JavaScript - interfață de programare care permite modulele pot fi încărcate asincronă și dependențele lor. Astfel, mapează două concepte de bază de dezvoltare software, modularizare și reutilizare, în mediul JavaScript altfel funcțional și monolitic . Modularizarea permite împărțirea unei aplicații Javascript în sub-componente individuale, care pot fi dezvoltate și testate separat (divide și cuceresc ). Datorită interfețelor clare, modulele AMD pot fi refolosite în alte proiecte software.

Procedura se bazează în mare parte pe inversarea modelului de control - proiectare (model IoC). Modulul corespunde termenului bean din IoC. Aceasta permite ca JavaScript să fie construit modular. Rezultatul sunt module care sunt comparabile cu Java - clasele sunt și pot fi la fel de extinse prin moștenire. Fiecare modul trebuie salvat în propriul fișier - analog clasei Java .

Avantajele modularizării sunt evidente în special în mediul browserului , unde JavaScript este utilizat în mod deosebit. Sunt încărcate doar modulele necesare, nu totul, așa cum ar fi cazul încărcării sincrone. Pe de o parte, acest lucru mărește performanța codului și, pe de altă parte, facilitează depanarea , mai ales în cazul problemelor de acces între domenii. În plus, permite o mai bună reutilizare a fragmentelor de cod individuale fără a fi nevoie să le transportați prin copiere și lipire sau concatenare de pe server . Acest lucru are ca rezultat o reducere a utilizării variabilelor globale la un nivel minim și astfel reduce semnificativ problemele cauzate de poluarea spațiului de nume.

Cu toate acestea, specificația distribuției codului pe mai multe fișiere individuale are de asemenea dezavantaje. Fiecare fișier trebuie să fie încărcat de browser într-o invocare HTTP separată , care, în multe fișiere mici, poate produce mult protocol - overhead . Acest lucru poate duce la o întârziere vizibilă , în special pentru conexiunile cu latență ridicată . Cu toate acestea, această cheltuială la apelarea diferitelor fișiere Javascript poate fi compensată prin utilizarea unui pachet de pe server.

Există diferite cadre AMD pentru a implementa formatul AMD, cum ar fi B. RequireJS , dojo Loader sau curl.js .

angajament

Formatul AMD oferă o definiție specială a modulului sau o definiție a componentelor care permite declararea și încărcarea corectă a dependențelor. Prin urmare, definiția modulului se bazează pe convenții de programare. Această convenție s-a schimbat în multe biblioteci Javascript disponibile gratuit, cum ar fi B. jQuery sau Socket.IO aplicat.

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

Codul programului de mai sus ilustrează definiția modulului în format AMD. Pe lângă numele modulului și dependențele, este definită o metodă din fabrică prin care este generat modulul. Această metodă din fabrică este utilizată pentru a crea o componentă și a exporta posibile obiecte de interfață. După cum se poate vedea, este necesară o bibliotecă Javascript pentru utilizarea formatului AMD, care oferă metoda de definire și instanțiază diferitele componente și injectează dependențele. În mediul AMD, acesta este denumit încărcător AMD. Procedura corespunde în mare măsură modelului fabricii abstracte și injectării dependenței cu un container IoC. În acest fel, orice componentă poate fi instanțiată și dependențele necesare pot fi furnizate în ordinea corespunzătoare. Componentele individuale ale unei aplicații JS pot fi decuplate unele de altele.

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

Link-uri web

Dovezi individuale

  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