In JavaScript bezieht sich AMD auf eine Modulspezifikation. Das Laden des Moduls hat keinen Einfluss auf die Ausführung nachfolgender Anweisungen, die auf diesem Modul basieren Bei einer Rückruffunktion wird die Rückruffunktion erst ausgeführt, wenn der Ladevorgang abgeschlossen ist.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, JavaScript-Version 1.8.5, Dell G3-Computer.
Da Websites nach und nach zu „Internetanwendungen“ werden, werden die in Webseiten eingebetteten Javascript-Codes immer größer und komplexer.
Webseiten ähneln immer mehr Desktop-Programmen und erfordern Arbeitsteilung und Zusammenarbeit eines Teams, Fortschrittsmanagement, Unit-Tests usw. Entwickler müssen Software-Engineering-Methoden verwenden, um die Geschäftslogik von Webseiten zu verwalten.
Die modulare Javascript-Programmierung ist zu einem dringenden Bedarf geworden. Im Idealfall müssen Entwickler nur die Kerngeschäftslogik implementieren und andere Module können von anderen geladen werden.
Javascript ist jedoch keine modulare Programmiersprache. Es unterstützt keine „Klassen“, geschweige denn „Module“. (Die sechste Ausgabe des ECMAScript-Standards, die derzeit formuliert wird, wird offiziell „Klassen“ und „Module“ unterstützen, aber es wird lange dauern, bis sie in die Praxis umgesetzt wird.)
Die Javascript-Community hat viel gemacht Bemühungen, in der vorhandenen Betriebsumgebung den Effekt eines „Moduls“ zu erzielen. Dieser Artikel fasst die aktuellen Best Practices der „Modularen Javascript-Programmierung“ zusammen und erklärt, wie man sie in die Praxis umsetzt. Obwohl dies kein Einführungstutorial ist, können Sie es verstehen, solange Sie ein wenig Verständnis für die grundlegende Syntax von Javascript haben.
Modulspezifikationen
Denken Sie zuerst darüber nach: Warum sind Module wichtig?
Aufgrund der Module können wir den Code anderer Leute bequemer verwenden und beliebige Module für alle gewünschten Funktionen laden.
Allerdings gibt es dafür eine Voraussetzung, das heißt, jeder muss das Modul auf die gleiche Weise schreiben, sonst hast du deine Art zu schreiben, und ich habe meine Art zu schreiben, wäre das nicht ein Durcheinander! Dies ist umso wichtiger, wenn man bedenkt, dass es derzeit keine offizielle Spezifikation für Javascript-Module gibt.
Derzeit gibt es zwei beliebte Javascript-Modulspezifikationen: CommonJS und AMD.
CommonJS
Im Jahr 2009 erstellte der amerikanische Programmierer Ryan Dahl das Projekt node.js, um die JavaScript-Sprache für die serverseitige Programmierung zu verwenden.
Dies markiert die offizielle Geburtsstunde der „modularen Javascript-Programmierung“. Denn um ehrlich zu sein: In einer Browserumgebung ist das Fehlen von Modulen kein großes Problem. Schließlich ist die Komplexität von Webprogrammen begrenzt, aber auf der Serverseite müssen Module vorhanden sein, um mit dem Betriebssystem und anderen Anwendungen zu interagieren. sonst gibt es keine Möglichkeit.
Das Modulsystem von node.js wird unter Bezugnahme auf die CommonJS-Spezifikation implementiert. In CommonJS gibt es eine globale Methode require() zum Laden von Modulen. Vorausgesetzt, es gibt ein Mathematikmodul math.js, kann es wie folgt geladen werden.
var math = require('math');
Dann können Sie die vom Modul bereitgestellte Methode aufrufen:
var math = require('math'); math.add(2,3); // 5
Da diese Serie hauptsächlich auf die Browserprogrammierung abzielt und nicht node.js beinhaltet, gibt es keine weitere Einführung in CommonJS. Hier müssen wir lediglich wissen, dass require() zum Laden von Modulen verwendet wird.
Browserumgebung
Nachdem wir das serverseitige Modul haben, ist es selbstverständlich, dass jeder das clientseitige Modul haben möchte. Und am besten ist es, wenn beide kompatibel sind, sodass ein Modul ohne Modifikation sowohl auf dem Server als auch im Browser laufen kann.
Aufgrund einer wesentlichen Einschränkung ist die CommonJS-Spezifikation jedoch nicht für Browserumgebungen geeignet. Der Code im vorherigen Abschnitt wird ein großes Problem haben, wenn er in einem Browser ausgeführt wird. Können Sie ihn sehen?
var math = require('math'); math.add(2, 3);
Die zweite Zeile von math.add(2, 3) wird nach der ersten Zeile von require('math') ausgeführt, Sie müssen also warten, bis math.js geladen ist. Das heißt, wenn das Laden lange dauert, bleibt die gesamte App einfach stehen und wartet.
Für die Serverseite stellt dies kein Problem dar, da alle Module auf der lokalen Festplatte gespeichert sind und synchron geladen werden können. Die Wartezeit ist die Lesezeit der Festplatte. Für Browser ist dies jedoch ein großes Problem, da die Module auf der Serverseite platziert sind und die Wartezeit von der Geschwindigkeit des Netzwerks abhängt. Es kann lange dauern und der Browser befindet sich im „suspendierten Tod“. Zustand.
Daher können browserseitige Module kein „synchrones Laden“ (synchron), sondern nur „asynchrones Laden“ (asynchron) verwenden. Dies ist der Hintergrund für die Geburt der AMD-Spezifikation.
AMD-Spezifikation
AMD ist die Abkürzung für „Asynchronous Module Definition“, was „asynchrone Moduldefinition“ bedeutet. Es lädt Module asynchron und das Laden des Moduls hat keinen Einfluss auf die Ausführung nachfolgender Anweisungen. Alle Anweisungen, die von diesem Modul abhängen, werden in einer Rückruffunktion definiert. Diese Rückruffunktion wird erst ausgeführt, wenn der Ladevorgang abgeschlossen ist.
AMD也采用require()语句加载模块,但是不同于CommonJS,它要求两个参数:
require([module], callback);
第一个参数[module],是一个数组,里面的成员就是要加载的模块;第二个参数callback,则是加载成功之后的回调函数。如果将前面的代码改写成AMD形式,就是下面这样:
require(['math'], function (math) { math.add(2, 3); });
math.add()与math模块加载不是同步的,浏览器不会发生假死。所以很显然,AMD比较适合浏览器环境。
目前,主要有两个Javascript库实现了AMD规范:require.js和curl.js。本系列的第三部分,将通过介绍require.js,进一步讲解AMD的用法,以及如何将模块化编程投入实战。
更多编程相关知识,请访问:编程视频!!
Das obige ist der detaillierte Inhalt vonWas ist Javascript ADM?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!