


Dies ist eine Zusammenfassung des Wissens über Javascript Modular AMD, CMD und CommonJS. Es dient als Dokumentation für diejenigen, die auch Fragen zu den drei Methoden haben, ich hoffe, Sie können sie darauf hinweisen . Ich wäre sehr dankbar.
Die Standardleser dieses Artikels kennen wahrscheinlich die Verwendung von require und seajs (AMD-, CMD-Verwendung), daher ist die Verwendungssyntax nicht enthalten.
1. Warum es geboren wurde:
Diese drei Spezifikationen wurden alle für das modulare Laden von JavaScript entwickelt. Sie laden bestimmte Module, wenn sie verwendet werden oder verwendet werden sollen, sodass eine große Anzahl von Systemen mit riesigen und komplexen Codes gut organisiert und verwaltet werden kann. Durch die Modularisierung wird die Verwendung und Verwaltung von Code weniger verwirrend und die Zusammenarbeit mehrerer Personen wird erleichtert.
2. Diese Normen:
(1) CommonJS ist eine Organisation, die am Aufbau eines JavaScript-Ökosystems interessiert ist. Es gibt eine ganze Community, die sich dafür einsetzt, JavaScript-Programme sowohl auf dem Server als auch im Browser portabler und austauschbarer zu machen.
Eine Gruppe mit dem Ziel, das JavaScript-Ökosystem für Webserver, Desktop- und Befehlszeilen-Apps sowie im Browser aufzubauen.
Ein speziell entwickelter Satz von Webservern des JavaScript-Ökosystems, in Browsern und Befehlszeilenanwendungen sowie auf dem Desktop. (Er sagte es in seinem eigenen Wiki)
Diese Organisation hat einige Spezifikationen formuliert (Sie können ihre Website http://www.commonjs.org/ besuchen), einschließlich der CommonJS Modules/1.0-Spezifikation. Dies ist, was wir normalerweise die commonjs-Spezifikation nennen.
„Die CommonJS-API wird diese Lücke füllen, indem sie APIs definiert, die viele gängige Anwendungsanforderungen erfüllen und letztendlich eine Standardbibliothek bereitstellen, die so umfangreich ist wie die von Python, Ruby und Java“ – (von http://www.commonjs. org/)
Commonjs ist also eine eher serverseitige Spezifikation. Node.js übernimmt diese Spezifikation. Gemäß der CommonJS-Spezifikation ist eine einzelne Datei ein Modul. Beim Laden des Moduls wird die Methode require verwendet, die eine Datei liest und ausführt und schließlich das Exportobjekt in der Datei zurückgibt.
Er sagte auch, dass es in den folgenden Szenarien verwendet werden kann, sodass er offensichtlicher auf die Serverseite ausgerichtet ist. Natürlich können Sie es auch im Browser verwenden (man sagt, Sie können es).
•Serverseitige JavaScript-Anwendungen
•Befehlszeilentools
•Desktop-GUI-basierte Anwendungen
•Hybridanwendungen (Titanium, Adobe AIR)
(2), AMD-Spezifikationen
Commonjs löst das Problem der Modularisierung und kann in Browsern verwendet werden. Wenn das Modul verwendet wird, verursacht es Probleme mit der Ladegeschwindigkeit usw. (Das synchrone Laden von Modulen durch den Browser führt zu Problemen wie Leistung, Verfügbarkeit, Debugging und domänenübergreifendem Zugriff).
Angesichts der besonderen Situation von Browsern ist eine weitere Spezifikation entstanden, die abhängige Module asynchron laden kann. Das ist die AMD-Spezifikation. AMD kann als Drop-in-Version von CommonJS-Modulen verwendet werden, solange CommonJS nicht für synchrone Require-Aufrufe verwendet wird. CommonJS-Code, der synchrone Anforderungsaufrufe verwendet, kann so konvertiert werden, dass er den AMD-Modullader im Callback-Stil verwendet (https://github.com/amdjs/amdjs-api/wiki/AMD-(%E4%B8%AD%E6%96%). 87%E7%89%88) (steht darin).
Hier ist eine Moduldefinition unter Verwendung einer einfachen CommonJS-Transformation (es ist eine Verwendung der AMD-Spezifikation):
var a = require('a'),
b = require('b');
exports.action = function () {};
});
Daher sind AMD und CommonJS kompatibel, solange die Aufrufmethode leicht geändert wird, kann ein synchrones Laden erreicht werden (ich vermute sehr, dass AMD auch eine auf CommonJS basierende Shell hinzugefügt hat, und dann habe ich keine anderen Shenma-Anweisungen und Supporttexte gefunden . Ich habe festgestellt, dass es hier hinzugefügt werden muss).
Wenn Sie sich die AMD-Spezifikationen ansehen, werden Sie feststellen, dass AMD die abhängigen Module grundsätzlich im Voraus angibt und diese Module dann vorab lädt. Tatsächlich erfordert dies, dass Sie sich im Voraus über diese Abhängigkeiten Gedanken machen und sie im Voraus schreiben, andernfalls Sie müssen mit dem Schreiben von Code fortfahren und am Anfang weitere Abhängigkeiten hinzufügen.
(3), CMD
Ich weiß nicht, ob Yubo Daniel von Taobao Seajs erstellt und behauptet hat, dass diese Spezifikation der CMD-Spezifikation folgt, und dann einen Link zu dieser Spezifikation angegeben hat (Sie finden das Wort Entwurf, wenn Sie es öffnen). ). Zu diesem Standard sagte Onkel Yu dies auf Zhihu
" AMD ist die standardisierte Ausgabe von Moduldefinitionen während des Promotion-Prozesses von RequireJS.
CMD ist die standardisierte Ausgabe der Moduldefinition während des Promotion-Prozesses von SeaJS.
Ähnlich wie bei der CommonJS Modules/2.0-Spezifikation handelt es sich um die standardisierte Ausgabe von Moduldefinitionen während des Promotion-Prozesses von BravoJS.
Es gibt noch viel mehr⋯⋯
„
Diese Spezifikation wurde also tatsächlich zur Förderung von Seajs entwickelt. Schauen wir uns also an, was mit SeaJS los ist. Im Grunde kennen Sie diese Spezifikation.
In ähnlicher Weise lädt Seajs auch Abhängigkeiten vor. Die JS- und AMD-Spezifikationen sind hinsichtlich des Vorladens gleich. Der offensichtliche Unterschied liegt im Aufruf und der Deklaration von Abhängigkeiten. Sowohl AMD als auch CMD verwenden „define“ und „require“, aber der CMD-Standard tendiert dazu, während der Verwendung Abhängigkeiten vorzuschlagen. Das heißt, egal, wo der Code geschrieben wird, stellen Sie plötzlich fest, dass Sie auf ein anderes Modul angewiesen sind, und verwenden Sie dann einfach „require“, um es einzuführen Im aktuellen Code helfen wir Ihnen beim Vorladen, und Sie können einfach schreiben, was Sie wollen. Der AMD-Standard erfordert jedoch, dass Sie die Abhängigkeitsparameter im Voraus in den Header schreiben (nicht gut geschrieben? Gehen Sie zurück und schreiben Sie sie richtig). Dies ist der offensichtlichste Unterschied.
3. Symbiose
Da es sich bei CommonJS um eine serverseitige Spezifikation handelt, stehen die beiden anderen Standards eigentlich nicht im Widerspruch.
AMD wird im Ausland häufiger verwendet, und natürlich wurden in China viele Versionen von jQuery 1 und 7 verwendet, und Dojo wurde in Version 1.6 verwendet, was bewiesen hat, dass es großartig genug ist.
Natürlich verwenden viele Leute CMD, aber sie konzentrieren sich im Wesentlichen auf China. Die offizielle Website von Seajs zeigt, dass viele großartige Unternehmen es verwenden (einschließlich iQiyi, Tencent Weibo, Alipay, Taobao usw.). Hier und schauen Sie sich http://seajs.org/docs/ an. Es gibt wahrscheinlich unzählige kleine und unbekannte Unternehmen. Schließlich benötigen viele Unternehmen Seajs-Fähigkeiten bei der Personalbeschaffung.
Die drei Spezifikationen sind derzeit also sehr gut (tatsächlich liegt das hauptsächlich daran, dass js über einen eigenen Modullademechanismus verfügt. Ich weiß nicht, was nach der Veröffentlichung von es6 passieren wird).
Was sollen wir tun, wenn wir eine Datei schreiben, die mit verschiedenen Ladespezifikationen kompatibel sein muss?
(function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD define(['jquery', 'underscore'], factory); } else if (typeof exports === 'object') { // Node, CommonJS之类的 module.exports = factory(require('jquery'), require('underscore')); } else { // 浏览器全局变量(root 即 window) root.returnExports = factory(root.jQuery, root._); } }(this, function ($, _) { // 方法 function a(){}; // 私有方法,因为它没被返回 (见下面) function b(){}; // 公共方法,因为被返回了 function c(){}; // 公共方法,因为被返回了 // 暴露公共方法 return { b: b, c: c } }));
Dieser Code ist mit verschiedenen Ladespezifikationen kompatibel.
4. Der Unterschied zwischen AMD und CMD
Die folgenden Punkte hat Onkel Yu zu Zhihu gesagt.
1. Bei abhängigen Modulen wird AMD im Voraus und CMD verzögert ausgeführt. Ab RequireJS 2.0 wurde es jedoch auch geändert, um die Ausführung verzögern zu können (die Verarbeitungsmethode ist je nach Schreibmethode unterschiedlich). CMD empfiehlt so faul wie möglich.
2. CMD fördert die Abhängigkeit vom nächstgelegenen Standort, während AMD die Abhängigkeit von der Front fördert.
3. Die API von AMD verwendet standardmäßig eine für mehrere Zwecke, während die API von CMD streng differenziert ist und eine einzige Verantwortung befürwortet. In AMD ist „require“ beispielsweise in globales „require“ und lokales „require“ unterteilt, die beide „require“ genannt werden. In CMD gibt es keine globale Anforderung. Stattdessen wird seajs.use bereitgestellt, um das Modulsystem basierend auf der Vollständigkeit des Modulsystems zu laden und zu starten. In CMD ist jede API einfach und klar.
4. Es gibt immer noch einige detaillierte Unterschiede. Schauen Sie sich einfach die Definition dieser Spezifikation an, daher werde ich nicht auf Details eingehen.
(Okay~ Zum vierten Punkt werde ich nicht mehr sagen...)
5. Einige Ähnlichkeiten zwischen AMD und CMD
Beide verfügen über define und require, und die aufrufende Methode kann tatsächlich Abhängigkeitsparameter hinzufügen. Dies bedeutet, dass das Vorladen abhängiger Module durch Bereitstellen von Abhängigkeitsparametern implementiert werden kann (dies wird jedoch nicht empfohlen, da Hinweis: Definieren mit ID- und Deps-Parametern. Verwendung nicht gehören zur CMD-Spezifikation, aber zur Modules/Transport-Spezifikation ---Von: https://github.com/seajs/seajs/issues/242).
AMD kann im Werk auch „require“ verwenden, um das verwendete Modul jetzt zu laden, dieses Modul wird jedoch nicht im Voraus geladen, und es handelt sich um einen synchronen Ladevorgang, der nur geladen wird, wenn es verwendet wird.
var a = require('a'); // Modul a laden
Wenn etwas nicht stimmt, korrigieren Sie mich bitte.
Der obige Artikel analysiert kurz die AMD CMD CommonJS-Spezifikation – eine Zusammenfassung der Lernerfahrung beim modularen Laden von Javascript. Ich hoffe, dass er Ihnen eine Referenz geben kann, und ich hoffe, dass Sie Script Home unterstützen .

Die Verschiebung von C/C zu JavaScript erfordert die Anpassung an dynamische Typisierung, Müllsammlung und asynchrone Programmierung. 1) C/C ist eine statisch typisierte Sprache, die eine manuelle Speicherverwaltung erfordert, während JavaScript dynamisch eingegeben und die Müllsammlung automatisch verarbeitet wird. 2) C/C muss in den Maschinencode kompiliert werden, während JavaScript eine interpretierte Sprache ist. 3) JavaScript führt Konzepte wie Verschlüsse, Prototypketten und Versprechen ein, die die Flexibilität und asynchrone Programmierfunktionen verbessern.

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

JavaScript ist die Kernsprache der modernen Webentwicklung und wird für seine Vielfalt und Flexibilität häufig verwendet. 1) Front-End-Entwicklung: Erstellen Sie dynamische Webseiten und einseitige Anwendungen durch DOM-Operationen und moderne Rahmenbedingungen (wie React, Vue.js, Angular). 2) Serverseitige Entwicklung: Node.js verwendet ein nicht blockierendes E/A-Modell, um hohe Parallelitäts- und Echtzeitanwendungen zu verarbeiten. 3) Entwicklung von Mobil- und Desktop-Anwendungen: Die plattformübergreifende Entwicklung wird durch reaktnative und elektronen zur Verbesserung der Entwicklungseffizienz realisiert.

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

SAP NetWeaver Server-Adapter für Eclipse
Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

Herunterladen der Mac-Version des Atom-Editors
Der beliebteste Open-Source-Editor

ZendStudio 13.5.1 Mac
Leistungsstarke integrierte PHP-Entwicklungsumgebung

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung