Heim Web-Frontend js-Tutorial Eine kurze Analyse der AMD CMD CommonJS-Spezifikation – Zusammenfassung der Lernerfahrungen zum modularen Laden von Javascript_Javascript-Fähigkeiten

Eine kurze Analyse der AMD CMD CommonJS-Spezifikation – Zusammenfassung der Lernerfahrungen zum modularen Laden von Javascript_Javascript-Fähigkeiten

May 16, 2016 pm 03:10 PM
amd cmd

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):

Code kopieren Der Code lautet wie folgt:
define(function (require, exports, module) {
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 
 
  } 
 
}));
Nach dem Login kopieren

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 .

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

ASUS stellt Adol Book 14 Air mit AMD Ryzen 9 8945H und kuriosem Räucherstäbchenspender vor ASUS stellt Adol Book 14 Air mit AMD Ryzen 9 8945H und kuriosem Räucherstäbchenspender vor Aug 01, 2024 am 11:12 AM

ASUS bietet bereits verschiedene 14-Zoll-Laptops an, darunter das Zenbook 14 OLED (aktuell 1.079,99 $ bei Amazon). Jetzt hat man sich entschieden, das Adol Book 14 Air vorzustellen, das auf den ersten Blick wie ein typischer 14-Zoll-Laptop aussieht. Allerdings ein unauffälliges Meta

Die Ryzen AI-Software erhält Unterstützung für die neuen AMD Ryzen-Prozessoren Strix Halo und Kraken Point Die Ryzen AI-Software erhält Unterstützung für die neuen AMD Ryzen-Prozessoren Strix Halo und Kraken Point Aug 01, 2024 am 06:39 AM

AMD Strix Point-Laptops sind gerade auf den Markt gekommen und die Strix Halo-Prozessoren der nächsten Generation werden voraussichtlich irgendwann im nächsten Jahr auf den Markt kommen. Allerdings hat das Unternehmen seiner Ryzen AI-Software bereits Unterstützung für die APUs Strix Halo und Krackan Point hinzugefügt.

Die AMD Radeon RX 7800M in OneXGPU 2 übertrifft die Nvidia RTX 4070 Laptop-GPU Die AMD Radeon RX 7800M in OneXGPU 2 übertrifft die Nvidia RTX 4070 Laptop-GPU Sep 09, 2024 am 06:35 AM

OneXGPU 2 ist die erste eGPU mit der Radeon RX 7800M, einer GPU, die selbst AMD noch nicht angekündigt hat. Wie One-Netbook, der Hersteller der externen Grafikkartenlösung, verriet, basiert die neue AMD-GPU auf der RDNA-3-Architektur und verfügt über das Navi

Der AMD Z2 Extreme-Chip für Handheld-Konsolen soll Anfang 2025 auf den Markt kommen Der AMD Z2 Extreme-Chip für Handheld-Konsolen soll Anfang 2025 auf den Markt kommen Sep 07, 2024 am 06:38 AM

Obwohl AMD den Ryzen Z1 Extreme (und seine Nicht-Extreme-Variante) speziell für Handheld-Konsolen entwickelt hat, fand sich der Chip bisher nur in zwei Mainstream-Handhelds wieder, dem Asus ROG Ally (aktuell 569 US-Dollar bei Amazon) und dem Lenovo Legion Go (drei). wenn man das R mitzählt

Beelink SER9: Kompakter AMD Zen 5 Mini-PC mit Radeon 890M iGPU, aber begrenzten eGPU-Optionen angekündigt Beelink SER9: Kompakter AMD Zen 5 Mini-PC mit Radeon 890M iGPU, aber begrenzten eGPU-Optionen angekündigt Sep 12, 2024 pm 12:16 PM

Beelink bringt weiterhin rasant neue Mini-PCs und dazugehöriges Zubehör auf den Markt. Um es noch einmal zusammenzufassen: Seit der Veröffentlichung des EQi12, EQR6 und des EX eGPU-Docks ist etwas mehr als ein Monat vergangen. Jetzt hat das Unternehmen seine Aufmerksamkeit auf AMDs neuen Strix gerichtet

AMD gibt die hochschwere Sicherheitslücke „Sinkclose' bekannt, die Millionen von Ryzen- und EPYC-Prozessoren betrifft AMD gibt die hochschwere Sicherheitslücke „Sinkclose' bekannt, die Millionen von Ryzen- und EPYC-Prozessoren betrifft Aug 10, 2024 pm 10:31 PM

Laut Nachrichten dieser Website vom 10. August hat AMD offiziell bestätigt, dass einige EPYC- und Ryzen-Prozessoren eine neue Schwachstelle namens „Sinkclose“ mit dem Code „CVE-2023-31315“ aufweisen, die möglicherweise Millionen von AMD-Benutzern auf der ganzen Welt betrifft. Was ist Sinkclose? Laut einem Bericht von WIRED ermöglicht die Schwachstelle Eindringlingen die Ausführung von Schadcode im „System Management Mode (SMM)“. Angeblich können Eindringlinge eine Art Malware namens Bootkit verwenden, um die Kontrolle über das System der anderen Partei zu übernehmen, und diese Malware kann von Antivirensoftware nicht erkannt werden. Hinweis von dieser Website: Der System Management Mode (SMM) ist ein spezieller CPU-Arbeitsmodus, der für erweiterte Energieverwaltung und betriebssystemunabhängige Funktionen entwickelt wurde.

Deal | Das Lenovo ThinkPad P14s Gen 5 mit 120-Hz-OLED, 64 GB RAM und AMD Ryzen 7 Pro ist derzeit 60 % günstiger Deal | Das Lenovo ThinkPad P14s Gen 5 mit 120-Hz-OLED, 64 GB RAM und AMD Ryzen 7 Pro ist derzeit 60 % günstiger Sep 07, 2024 am 06:31 AM

Heutzutage gehen viele Schüler wieder zur Schule und einige bemerken möglicherweise, dass ihr alter Laptop dieser Aufgabe nicht mehr gewachsen ist. Einige College-Studenten sind vielleicht sogar auf der Suche nach einem High-End-Business-Notebook mit einem tollen OLED-Bildschirm, in diesem Fall t

Gerüchten zufolge soll der erste Minisforum-Mini-PC mit Ryzen AI 9 HX 370 zu einem hohen Preis auf den Markt kommen Gerüchten zufolge soll der erste Minisforum-Mini-PC mit Ryzen AI 9 HX 370 zu einem hohen Preis auf den Markt kommen Sep 29, 2024 am 06:05 AM

Aoostar war einer der ersten, der einen Strix Point Mini-PC ankündigte, und später brachte Beelink den SER9 mit einem rasanten Startpreis von 999 US-Dollar auf den Markt. Minisforum schloss sich der Party an, indem es den EliteMini AI370 vorstellte, und wie der Name schon sagt, wird es das Unternehmen sein

See all articles