Unterschiede zwischen Narwal und Node.js?
Ich bin neu Node.js und ich lese über Narwal ist ein framework basierend auf Rhino.
Meine Fragen:
- Wenn ich mit Node.js, kann ich die Zähne von Narwal und die Bibliotheken/Module?
- Sind nicht die Bibliotheken/Module in Narwal IO-blockiert (warum Node.js habe diese große Popularität)?
- Ist Node.js nur für die Erstellung von Web-Servern, oder ist es für die Erstellung von Allgemeinen Anwendungen, wie Narwal?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie entweder Knoten oder Narwal, verwenden Sie nur Pakete und Module, die für die Kompatibilität mit der jeweiligen engine. Derzeit gibt es viele Nuancen zu schreiben von Anwendungen, Pakete und Module, arbeiten beide Motoren. Kris Zyp vom Dojo gestellt hat, ziemlich viel Mühe, damit seine Pakete funktionieren auf beiden Systemen und ich kann nicht denken von niemand sonst.
Narwal input-und output-Module blockiert werden, ähnlich wie die standard-Bibliotheken für Python, Ruby, Perl, C, Java, und so weiter.
Ist, gibt es jedoch eine Klasse von Anwendungen, die nicht effektiv geschrieben mit blocking-IO, wie Spiele, die pflegen, Ihren Zustand in den Speicher des server-und stateful-Kommunikation mit zahlreichen Kunden. Nur Experimente können zeigen, ob threads oder event-loops besser für individuelle Anwendungen. Aber, ist es außerdem schwierig und gefährlich zu schreiben "evented" Anwendungen in den meisten Programmiersprachen und Bibliothek ökosysteme, weil die Vorteile der Verwendung von non-blocking IO können Sie schnell vermeiden, indem Sie die Nutzung von blocking-IO, und die Blockierung von IO ist Häufig versteckt in den Schichten der Architektur, sogar so niedrig wie die Betriebssystem-Schnittstelle. Knoten ist spannend, weil es ist die Schaffung eines ökosystems mit streng asynchroner IO ist damit das erste system, in dem diese Klasse von Anwendungen ist relativ einfach zu schreiben.
Befürworter wie Doug Crockford und Mark Miller argumentieren, dass der asynchrone Ereignis-Schleife Programmierung ist die Art und Weise meisten Anwendungen sollten so geschrieben werden, weil es einfacher ist, zu Grunde geht Datenfluss, Parallelität und die Sicherheit in diesen Systemen und blind zu verfassen solcher Teilsysteme ohne Kompromisse Richtigkeit oder Vollständigkeit.
Jedoch, wenn Sie möchten, um die Vorteile von JavaScript als Sprache, wollen aber nicht zu kaufen in der zusätzlichen Komplexität der event-Schleife Programmieren, Narwal ist speziell für die Arbeit auf beiden JavaScriptCore, die schnelle JavaScript-engine hinter Safari und auch auf Rhino. Mit Rhino gibt Ihnen Zugang zu Googles AppEngine. Narwal war entworfen, um Ihnen die Flexibilität der JavaScript-engine, aber es hat nicht berücksichtigt Knoten IO-Modell. Narwal wird auch ausgiebig von den 280 North software-ökosystem, für die build-tools und Server für Cappuccino, Objective-J-Anwendungen, wie Jake und Jack.
Beiden Knoten und der Narwal kann verwendet werden, für Allgemeine Anwendungen und web-Server. Knoten ist besonders gut geeignet für Netzwerk-clients und-Servern. Narwal ist besonders gut geeignet für Unix-artige Programme und JSGI, CGI-wie web-Server, und ist konzipiert, um JSGI Anwendungen auf einer Vielzahl von web-Servern, ohne Veränderung.
Anwendungen schreiben, die auf beiden Narwal und der Knoten ist schwierig, aber möglich. Schreiben "Pakete", die Arbeit für die Zähne von Narwal und Knoten ist möglich, muss aber getan werden, bewusst. Wenn ein Paket nicht werben, dass es wurde entwickelt und getestet, auf beiden Narwal und Knoten, können Sie darauf Wetten, es wird nur funktionieren, auf eine oder die andere.
io: Module, die nicht machen Verwendung von E /a-Subsysteme, wie Parser, formatter, Encoder und Decoder, sind besonders gut geeignet für code-sharing zwischen den beiden Narwal und Knoten.
Pakete: gibt Es Unterschiede in der Art der Pakete sind ausgelegt für NPM (Node Package Manager) und Tusk (Narwal ist der Paket-manager). Beide verwenden Paket.json, aber "Abhängigkeiten" haben unterschiedliche Bedeutungen auf den einzelnen. Es gibt einen neuen patch für den Narwal, der es ermöglicht, tollerate diese Inkonsistenz. Wenn die Pakete installiert sind, in die Zähne von Narwal, teilen Sie alle den gleichen Modul-name-space, wie Ruby. Mit NPM, jedes Paket hat einen Teilbaum des Moduls name space mit demselben Namen wie das Paket.
Module: Knoten und Narwal beide bieten unterschiedliche Erweiterungen der CommonJS - Modul-Spezifikation.
__dirname
.module.exports = x
.require.once(id, scope)
für die Ausführung der Modul einmal (unabhängig davon, ob es vorher geladen) mit zusätzlichen freien Variablen in scope (diese werden manchmal fälschlicherweise als "globals").module.path
für die Datei name des aktuellen Moduls.Ich möchte nur hinzufügen, RingoJS in den mix. Es ist Rhino-basierte CommonJS system, aber im Vergleich zu Narwal ist es viel mehr Reife (seine primäre Autor entwickelt seine Vorgänger Helma seit Jahren) und durch die folgenden beiden gits seiner Entwicklung RingoJS scheint zu sein, viel mehr aktiv zu sein. Entwicklung der Narwal scheint irgendwie langsam in diesen Tagen.
Wenn Sie es vorziehen Narhwal die synchron-Stil, können Sie auch meine Gemeinsamen Knoten - Paket, das ermöglicht Ihnen das ausführen der synchronen Narwal, RingoJS und andere CommonJS-kompatible Pakete sowie JSGI webapps auf einem Knoten.
Node.js sollte nicht verglichen werden, um die Zähne von Narwal, stattdessen sollte es im Vergleich zum Rhino. Wie Rhino, Node.js ist eine javascript-interpreter.
Node.js entsprechen die CommonJS-Spezifikation für Module, so dass alle libraries sind CommonJS-kompatibel. Es sieht aus wie Narwal ist auch CommonJS-kompatibel, was bedeutet, dass Sie wäre brauchbar Knoten.
Aber der erste Blick auf die Knoten der standard-Module, da scheint es eine Menge überschneidungen gibt es mit dem Narwal. Außerdem haben Sie einen Blick auf die Liste der 3rd-party-Module zur Verfügung für Node.js: http://github.com/ry/node/wiki/modules
Zusätzliche Antwort:
Ah, sehe ich jetzt. Narwal ist in der Tat wie ein Knoten. Sie sagte, dass die Narwal ist ein Rahmen, welcher mich warf. Ich sehe jetzt, dass es nicht ist. Ja, die intro-Seite sagt, dass Sie laufen können frameworks wie Nitro auf der Oberseite der Narwal-interpreter.
Den Unterschied zwischen Narwal und Knoten ist im Grunde Narwal verwendet eine steckbare javascript-engine-Architektur, während die Knoten nur V8. Beide sind javascript "Schalen" richtige (nennen wir Sie, dass für jetzt, um Verwirrung zu vermeiden, mit dem Begriff "interpreter").
Ich bin mir nicht sicher, wie weit kann man CommonJS-Bibliotheken geschrieben, die entweder für Plattform und verwenden Sie es auf der anderen Plattform. Ich würde vermuten, die sicherlich alle das Reine JS-libs sind cross-kompatibel. Knoten verwenden, die eine nicht blockierende I/O-Modell so einige binäre Module für Narwal funktioniert möglicherweise nicht ordnungsgemäß auf Knoten.
Knoten hat stress callback-Stil der Programmierung, obwohl (maximal zu nutzen nonblocking I/O). Für einen gestandenen JS-Programmierer, dies ist nicht ein Problem, da wir es gewohnt sind
setTimeout()
,XMLHttpRequest
etc. In der Tat, wie ein erfahrener JS-Programmierer, dass ich solche lieber im Knoten-Stil. Narwal fühlt sich viel zu sehr wie C.Beispiele:
Hier ist, was ich meine, durch die anderen "fühlen" der Knoten über Narwal.
In Narwal, der Beispiel für schlürfen eine Datei ist:
In Node.js es ist:
Genau wie
setTimeout
, Lesen von Dateien im Knoten asynchron ist (Ihren code warten müssen, für die Festplatte suchen und Lesen von Daten während der Zeit, die Sie ausführen können, andere Teile des Codes).