it-swarm.com.de

Ist Node.js ein Framework?

Ich sehe immer wieder, dass Personalvermittler, Entwickler usw. Node.js als Framework bezeichnen. Meiner Meinung nach ist dies aus Unwissenheit darüber, was Node.js wirklich ist.

In Jobbeschreibungen wird Node.js häufig als Bibliothek unter AngularJS , React usw. zusammengefasst. Im Allgemeinen sehe ich es als von jemandem eingegeben an, der dies nicht tut kennen den Unterschied (HR, ein Personalvermittler usw.).

Meiner Meinung nach ist Node.js eine Plattform oder eine Laufzeitumgebung. Es schaltet die DOM-API (JavaScript im Browser) für verschiedene andere APIs wie das Dateisystem aus (da es als Server und nicht im Browser ausgeführt wird).

Warum denken die Leute, dass Node.js ein Framework ist? Liege ich falsch? Ist es tatsächlich ein Rahmen?

36
ndugger

Es ist etwas schwer zu sagen, weil diese Wörter nicht gut definiert sind. Im allgemeinen Sprachgebrauch halte ich es für etwas untypisch, Node.js als Framework zu bezeichnen, aber es fällt mir schwer, darüber zu streiten, warum genau dies nicht der Fall ist.

Das alles wird heikel und ich sehe oft wirklich schlechte Sprachverwendungen, also werde ich explizit sein und von unten beginnen


JavaScript ist eine Computersprache, dh eine Reihe von Konventionen, die es uns ermöglichen, eine Reihe von Texten so zu lesen und zu interpretieren, dass sie Ausführungssemantik - ein ausgefallenes Wort für "Interpretationsweise" haben die Sprache als eine Reihe von Anweisungen ". Klassen von Programmen mit dem Namen Interpreter, Compiler, Transpiler, Linters, highlighters usw. nehmen alle Text auf und versuchen, etwas mit diesem konventionellen Verständnis der Ausführung des Codes zu tun.

  • Interpreter tatsächlich durchführen die Ausführungssemantik durch Bedienen einer Maschine - normalerweise Ihres Computers. Sie können sich diese als einen kleinen Mann in Ihrem Computer vorstellen, der Schalter wie "Dieses Zeichen drucken" betätigt, basierend auf den Anweisungen, die in Ihrem JavaScript-Programm geschrieben wurden.
  • Compiler versuchen, den JavaScript-Text in einen neuen Textsatz zu konvertieren, der eine Ausführungssemantik für eine andere Sprache aufweist - möglicherweise eine mit der speziellen Eigenschaft, die Computer direkt verwenden können Führ es aus.
  • Transpiler sind eine verallgemeinerte Form des Compilers, da sie JavaScript-Text in eine andere Sprache aufnehmen und Text ausgeben. Der Unterschied ist also ein wenig subjektiv, aber normalerweise betrachtet man einen Compiler als Ausgabe von Code auf sehr niedriger Ebene und einen Transpiler als Ausgabe von Code auf hoher Ebene.
  • Linters , Textmarker , Typ Prüfer , usw. nehmen alle JavaScript-Text auf und geben eine Art analytisches Produkt aus, z. B. hervorgehobenen Text beeinflusst von der Ausführungssemantik, aber nicht repräsentativ dafür.

Lassen Sie uns nun ein wenig in die Ausführungssemantik eintauchen. Im Allgemeinen beinhaltet die Ausführungssemantik einen Prozess des Lesens von Sprachtext und des Erreichens einer Beschreibung einer abstrakten Maschine oder einer Beschreibung beobachtbarer Nebenwirkungen. Was ich vorschlagen möchte, ist, dass beide davon ausgehen, dass es eine Art "Low-Level-API" geben muss, um entweder die Maschine zu bedienen oder die beobachtbaren Effekte auszuführen. Diese werden normalerweise als Teil der Laufzeitumgebung betrachtet

  • Die Laufzeitumgebung oder Laufzeit ist eine Menge von angenommenen Grundelementen, die die Sprache verwendet Konvention muss existieren, um zu funktionieren. Was die Sprache betrifft, kann es einige Annahmen über ihr Verhalten geben, aber sie sind nicht beobachtbar. In den Bildern des obigen Dolmetschers betätigt der "Mann im Inneren" nur die Schalter der Laufzeit - er kann nicht persönlich überprüfen, was sie tun.

Das Wort Laufzeit wird normalerweise missbraucht, um sowohl die Menge der angenommenen Grundelemente selbst und eine tatsächliche Instanziierung von ihnen zu bedeuten.


Jetzt kommen wir also zu etwas Haarigem. Eine Sprache ist eine Reihe von Konventionen, die die Existenz einer Laufzeit voraussetzen, um ihrer Ausführungssemantik einen Sinn zu geben. Es "untersucht sie nie", da sie außerhalb des Anwendungsbereichs liegen.

Um tatsächlich verwenden eine Sprache zu verwenden, möchten Sie neben einer Laufzeitimplementierung so etwas wie einen Compiler oder Interpreter. Der Compiler/Interpreter und diese Laufzeit gehen Hand in Hand mit tatsächlich Ausführen Ihrem Code.

  • Chrome V8, oft als Engine bezeichnet, ist ein Paket, das einen Interpreter enthält. Compiler, Laufzeitimplementierung kompatibel mit der Laufzeitschnittstelle, die von den ECMA-Standard-JavaScript-Konventionen gefordert wird.

Wo passt Node.js dazu?

Wir müssen es in Teile zerlegen:

  1. Node.js erweitert die JavaScript-Sprache durch die Bereitstellung eines größeren Satzes von Grundelementen für die Laufzeitumgebung - solche, die außerhalb des Geltungsbereichs der ECMA-Standards liegen. Dazu gehören Dinge wie Datei-E/A. Dies bedeutet, dass Node.js die Sprache ändert und in gewissem Sinne eine neue Sprache ist: "Node.js JavaScript"
  2. Node.js enthält als Paket einen Interpreter und einen Compiler. Es stiehlt nur diese von V8.
  3. Node.js bietet eine Implementierung der Node.js-Laufzeitumgebung, mit der "Node.js JavaScript" ausgeführt werden kann.
  4. Node.js bietet eine Reihe von Standardbibliotheken, die auf den neuen Grundelementen basieren und Endbenutzern von "Node.js JavaScript" den Zugriff erleichtern.

Node.js ist also eine Menge Dinge!

Aber ist es ein Rahmen?


Hier fällt die Terminologie völlig auseinander - niemand hat eine gute, konsistente und aussagekräftige Definition dessen, was ein Framework tatsächlich ist.

Es gibt Debatten, die toben: "Was ist ein Framework gegen eine Bibliothek?" Und sie enden mit unbefriedigenden Dingen wie "Eine Bibliothek ist etwas, das Sie nennen, und ein Framework ist etwas, das Sie anruft". Ich möchte nicht einmal wirklich eine so traurige Erklärung ins Licht der Öffentlichkeit rücken - aber JavaScript und insbesondere Node.js JavaScript sind ein enormer Schlag gegen diese Definition, da die gesamte Rückruf-Weiterleitungstechnik bedeutet, dass Sie ständig Umschalten zwischen Anrufen und Anrufen.

Meiner persönlichen Meinung nach gibt es hier etwas Wesentliches. Ich möchte keine helle Linie ziehen, aber ich werde nur sagen

  • Ein Satz Code ist bibliotheksähnlich, wenn er wie ein Satz Legos funktioniert: teilbar und für die Assembly gemacht. Während es einige Beispiele für die Verwendung der Bibliothek gibt, liegt es im Allgemeinen beim Benutzer selbst, sie nach seinen Bedürfnissen zusammenzustellen.
  • Ein Satz von Code ist Framework-ähnlich, wenn er nicht teilbar ist und Konventionen impliziert *: Wenn Teile davon auseinandergezogen werden, können viele Annahmen fehlschlagen, sodass Sie konventionelle Verwendung verstehen müssen, um sie verwenden zu können ein Rahmen richtig.

Dies ist zwar eine Handwellenlinie, aber ich möchte einen wirklich interessanten Punkt über Frameworks herausstellen:

Frameworks implizieren eine Reihe von Konventionen zur Interpretation von Code. Sie sind daher eine eigenständige Sprache.

Dies ist vielleicht etwas, worüber die Leute auch streiten möchten, aber wenn Sie meine frühere Definition gekauft haben, dass eine Sprache nur eine Reihe von Konventionen ist, die einen Textblock zum Leben erwecken, dann werden Sie immer dann, wenn Sie eine neue Ebene von Konventionen festlegen. Ich habe eine neue Sprache gebaut. Vielleicht sind bei Frameworks die Rohstoffe die semantischen Interpretationen ihrer Host-Sprache anstelle von Rohtextdateien, aber die Idee ist dieselbe!


Nach all dem bin ich total glücklich, Node.js als Framework zu bezeichnen, auch wenn es ein bisschen gegen die Norm verstößt! Node.js erweitert das unformatierte JavaScript um Funktionen wie Erweiterung der Sprache. Dies bringt neue Annahmen und Werkzeuge für die Arbeit in dieser erweiterten Sprache mit sich. Funktionell sind diese Ideen dieselben wie die Ideen anderer gut akzeptierter Frameworks wie Ruby on Rails .

Ich würde argumentieren, wenn Sie sich in diesem Moment etwas unwohl fühlen und argumentieren möchten, dass es eine große Kluft zwischen Ruby on Rails und Node.js) gibt Art und Weise der Dinge dann ich bin genau dort bei dir natürlich. Die Art von konzeptuellen Welten, in denen die beiden leben, sind dramatisch unterschiedlich - ich will nur um zu sagen, dass sie dasselbe sind: Konventionen zur Erweiterung der Fähigkeiten einer Basissprache innerhalb eines bestimmten Bereichs.

Ich bin auch froh, vorschlagen zu können, dass die Domain von Node.js winzig und eng ist und daher die hinzugefügten Konventionen einfach zu begründen und relativ leicht zu korrigieren sind. OTOH, Ruby on Rails lebt in einer komplexen, schlecht definierten Domäne von "Business-Webanwendungen", was bedeutet, dass die darin festgelegten Konventionen sicherlich verschwommen und gebrochen sind.


Aber all dies ist ein langer Weg zu sagen, ja, Personalvermittler haben wahrscheinlich keine Ahnung, was sie meinen, wenn sie das sagen. Ich vermute, "Framework" klingt einfach nach einem besseren, grokkbareren Wort als "Laufzeit" oder "Engine".

44
J. Abrahamson

Node.js® ist eine JavaScript-Laufzeit , die auf der V8-JavaScript-Engine von Chrome basiert.

Quelle

Der Knoten ist eine Laufzeit oder Umgebung. Es ist kein Rahmen. Leute (ich fühle) verstehen das oft falsch, weil Frameworks wie Express bei Node allgegenwärtig sind.

mehr über Laufzeiten und Frameworks lesen wenn Sie interessiert sind.

20
rlemon