Frage Wie kann man entscheiden, wann Node.js verwendet werden soll?


Ich bin neu in dieser Art von Sachen, aber in letzter Zeit habe ich viel darüber gehört, wie gut Node.js ist. Wenn ich bedenke, wie gerne ich mit jQuery und JavaScript im Allgemeinen arbeite, kann ich nicht anders, als mich zu fragen, wie ich entscheiden soll, wann ich Node.js verwenden soll. Die Webanwendung, an die ich denke, ist so etwas wie Bitschig - nimmt etwas Inhalt, archiviert es.

Von all den Hausaufgaben, die ich in den letzten Tagen gemacht habe, habe ich folgende Informationen erhalten. Node.js

  • ist ein Befehlszeilentool, das als normaler Webserver ausgeführt werden kann und es ermöglicht, JavaScript-Programme auszuführen
  • nutzt das Große V8-JavaScript-Engine
  • ist sehr gut, wenn Sie mehrere Dinge gleichzeitig tun müssen
  • ist ereignisbasiert, also all das Wunderbare AjaxÄhnliches kann auf der Serverseite gemacht werden
  • lässt uns Code zwischen dem Browser und dem Backend teilen
  • Lassen Sie uns mit MySQL sprechen

Einige der Quellen, auf die ich gestoßen bin, sind:

Bedenkt, dass Node.js fast out-of-the-box ausgeführt werden kann Amazon EC2 Ich versuche zu verstehen, welche Art von Problemen Node.js erfordert, im Gegensatz zu irgendeinem der mächtigen Könige da draußen PHP, Python und Rubin. Ich verstehe, dass es wirklich auf die Expertise ankommt, die man in einer Sprache hat, aber meine Frage fällt eher in die allgemeine Kategorie: Wann ist ein bestimmtes Framework zu verwenden und für welche Art von Problemen ist es besonders geeignet?


2200
2018-02-21 05:20


Ursprung


Antworten:


Du hast eine großartige Arbeit geleistet und zusammengefasst, was an Node.js großartig ist. Meines Erachtens ist Node.js besonders für Anwendungen geeignet, bei denen Sie eine dauerhafte Verbindung vom Browser zum Server beibehalten möchten. Mit einer Technik, die als bekannt ist "lange Umfrage"Sie können eine Anwendung schreiben, die dem Benutzer in Echtzeit Updates sendet. Lange Polling bei vielen Giganten des Internets machen, wie Ruby auf Schienen oder Django, würde eine immense Last auf dem Server verursachen, weil jeder aktive Client einen Serverprozess verschlingt. Diese Situation beläuft sich auf a Plane Attacke. Wenn Sie etwas wie Node.js verwenden, muss der Server keine separaten Threads für jede offene Verbindung verwalten.

Dies bedeutet, dass Sie einen erstellen können Browser-basierte Chat-Anwendung in Node.js, die fast keine Systemressourcen benötigt, um sehr viele Clients zu bedienen. Wann immer Sie diese Art von Polling durchführen möchten, ist Node.js eine gute Option.

Es ist erwähnenswert, dass Ruby und Python beide Werkzeuge haben, um so etwas zu tun (Eventmaschine und verdrehtebzw.), aber das Node.js macht es außergewöhnlich gut und von Grund auf. JavaScript ist für ein callback-basiertes Concurrency-Modell außergewöhnlich gut geeignet, und es zeichnet sich hier aus. Auch die Serialisierung und Deserialisierung mit JSON, die sowohl auf dem Client als auch auf dem Server nativ ist, ist ziemlich geschickt.

Ich freue mich darauf, andere Antworten hier zu lesen, das ist eine fantastische Frage.

Es lohnt sich, darauf hinzuweisen, dass Node.js auch für Situationen geeignet ist, in denen Sie viel Code über die Client / Server-Lücke hinweg wiederverwenden. Das Meteor-Rahmen macht dies wirklich einfach, und viele Leute schlagen vor, dass dies die Zukunft der Web-Entwicklung sein könnte. Ich kann aus Erfahrung sagen, dass es eine Menge Spaß macht, Code in Meteor zu schreiben, und ein großer Teil davon ist, weniger Zeit damit zu verbringen, darüber nachzudenken, wie Sie Ihre Daten umstrukturieren werden, damit der Code, der im Browser läuft, einfach ist manipuliere es und gib es zurück.

Hier ist ein Artikel über Pyramid und Long-Polling, der mit Hilfe von gevent sehr einfach einzurichten ist: TicTacToe und Long Polling mit Pyramide.


1359
2018-02-21 05:30



Ich glaube, dass Node.js am besten für Echtzeitanwendungen geeignet ist: Online-Spiele, Collaboration-Tools, Chatrooms oder alles, was ein Benutzer (oder Roboter? Oder Sensor?) Mit der Anwendung sofort sehen muss, ohne eine Seitenaktualisierung.

Ich sollte auch erwähnen, dass Socket.IO in Kombination mit Node.js Ihre Echtzeit-Latenz sogar noch weiter reduziert, als es mit Long Polling möglich ist. Socket.IO wird im schlimmsten Fall auf lange Abfragen zurückgreifen und stattdessen Web-Sockets oder sogar Flash verwenden, wenn sie verfügbar sind.

Aber ich sollte auch erwähnen, dass jede Situation, in der der Code aufgrund von Threads blockieren könnte, besser mit Node.js behandelt werden kann. Oder jede Situation, in der die Anwendung ereignisgesteuert sein soll.

Auch Ryan Dahl sagte in einem Vortrag, dass ich einmal daran teilgenommen habe, dass die Node.js-Benchmarks bei regelmäßigen alten HTTP-Anfragen eng mit Nginx konkurrieren. Wenn wir also mit Node.js arbeiten, können wir unsere normalen Ressourcen sehr effektiv bedienen, und wenn wir das ereignisgesteuerte Zeug brauchen, ist es bereit, damit umzugehen.

Außerdem ist es immer JavaScript. Lingua Franca auf dem ganzen Stapel.


410
2018-02-21 06:43



Gründe für die Verwendung von NodeJS:

  • Es läuft Javascript, so dass Sie das verwenden können dieselbe Sprache auf Server und Client, und teilen Sie sogar etwas Code zwischen ihnen (z. B. für die Formularvalidierung oder zum Rendern von Ansichten an jedem Ende).

  • Das single-threaded Ereignisgesteuertes System ist schnell Auch wenn viele Anfragen gleichzeitig bearbeitet werden, und auch einfach im Vergleich zu herkömmlichen Multithreads Java oder ROR-Frameworks.

  • Der ständig wachsende Pool von Pakete zugänglich über NPMeinschließlich client- und serverseitiger Bibliotheken / Module sowie Befehlszeilentools für die Webentwicklung. Die meisten davon sind bequem auf GitHub gehostet, wo Sie manchmal ein Problem melden und es innerhalb von Stunden behoben finden können! Es ist schön, alles unter einem Dach zu haben, mit standardisierten Problemberichten und einfachem Forking.

  • Es ist zur defacto Standardumgebung geworden, in der man läuft Javascript-bezogene Werkzeuge und andere webbezogene Toolseinschließlich Task-Runner, Minifier, Verschönerungssoftware, Linters, Präprozessoren, Bundler und Analyseprozessoren.

  • Es scheint ziemlich geeignet für Prototyping, agile Entwicklung und schnelle Produkt-Iteration.

Gründe dafür nicht NodeJS verwenden:

  • Es läuft Javascript, das keine Überprüfung der Kompilierungszeit hat. Für große, komplexe sicherheitskritisch Systeme oder Projekte, einschließlich der Zusammenarbeit zwischen verschiedenen Organisationen, eine Sprache, die ermutigt vertragliche Schnittstellen und stellt zur Verfügung statische Typprüfung kann Ihnen einige Debuggingzeit sparen (und Explosionen) auf Dauer. (Obwohl die JVM festsitzt nullBitte verwenden Sie Haskell für Ihre Kernreaktoren.)

  • Hinzu kommt, dass viele der Pakete in NPM ein wenig sind rohund immer noch in rasanter Entwicklung. Einige Bibliotheken für ältere Frameworks haben ein Jahrzehnt des Testens und Bugfixing durchlaufen und sind sehr stabil inzwischen. Npmjs.org hat keinen Mechanismus, um Pakete zu bewerten, was zu einer Zunahme von Paketen geführt hat, die mehr oder weniger dasselbe tun, von denen ein großer Prozentsatz nicht länger aufrechterhalten wird.

  • Verschachtelte Callback-Hölle. (Natürlich gibt es 20 verschiedene Lösungen zu diesem ...)

  • Der ständig wachsende Pool von Paketen kann dazu führen, dass ein NodeJS-Projekt angezeigt wird radikal anders von der nächsten. Es gibt eine große Vielfalt an Implementierungen aufgrund der großen Anzahl von verfügbaren Optionen (z. B. Express /Sails.js/Meteor/Derby). Dies kann es manchmal für einen neuen Entwickler schwieriger machen, in ein Node-Projekt einzusteigen. Vergleichen Sie das mit einem Schienen Entwickler, die einem bestehenden Projekt beitreten: Er sollte sich recht schnell mit der App vertraut machen können, da alle Rails - Anwendungen dazu angehalten sind, eine ähnliche Struktur.

  • Der Umgang mit Dateien kann ein wenig schmerzhaft sein. Dinge, die in anderen Sprachen trivial sind, wie das Lesen einer Zeile aus einer Textdatei, sind komisch genug mit Node.js zu tun dass es eine StackOverflow-Frage mit über 80 upvotes gibt. Da ist keine einfache Möglichkeit, einen Datensatz nach dem anderen aus einer CSV-Datei zu lesen. Etc.

Ich liebe NodeJS, es ist schnell und wild und macht Spaß, aber ich bin besorgt, es hat wenig Interesse an beweisbarer Korrektheit. Hoffen wir, dass wir das Beste aus beiden Welten zusammenführen können. Ich bin gespannt, was Node in Zukunft ersetzen wird ... :)


209
2017-11-25 21:47



Um es kurz zu machen:

Node.js ist gut geeignet für Anwendungen, die viele gleichzeitige Verbindungen haben und jede Anfrage nur sehr wenige CPU-Zyklen benötigt, weil die Ereignisschleife (mit allen anderen Clients) während der Ausführung einer Funktion blockiert ist.

Ein guter Artikel über die Ereignisschleife in Node.js ist Mixus Tech-Blog: Die Ereignisschleife von node.js verstehen.


208
2018-01-15 01:48



Ich habe ein Beispiel aus der Praxis, wo ich Node.js benutzt habe. Das Unternehmen, in dem ich arbeite, hat einen Kunden, der eine einfache statische HTML-Website haben wollte. Diese Website ist für den Verkauf eines Artikels mit PayPal und der Kunde wollte auch einen Zähler haben, der die Menge der verkauften Artikel anzeigt. Der Kunde erwartet eine große Anzahl von Besuchern auf dieser Website. Ich habe beschlossen, den Zähler mit Node.js und der Express.js Rahmen.

Die Node.js-Anwendung war einfach. Holen Sie sich die Menge der verkauften Artikel von a Redis Datenbank, erhöhen Sie den Zähler, wenn Artikel verkauft wird, und bedienen Sie den Zählerwert über die API.

Einige Gründe, warum ich Node.js in diesem Fall verwendet habe

  1. Es ist sehr leicht und schnell. Es gab über 200000 Besuche auf dieser Website in drei Wochen und minimale Server-Ressourcen waren in der Lage, alles zu bewältigen.
  2. Der Zähler ist wirklich einfach zu machen, um in Echtzeit zu sein.
  3. Node.js war einfach zu konfigurieren.
  4. Es gibt viele Module kostenlos zur Verfügung. Zum Beispiel habe ich ein Node.js-Modul für PayPal gefunden.

In diesem Fall war Node.js eine großartige Wahl.


127
2018-05-31 06:34



Die wichtigsten Gründe, um Ihr nächstes Projekt mit Node zu starten ...

  • Alle coolsten Jungs sind drin ... so ist es Muss sei lustig.
  • Sie können sich am Kühler treffen und viele Node-Abenteuer erleben.
  • Sie sind ein Penny Pincher, wenn es um Cloud-Hosting-Kosten geht.
  • Da war das mit Rails gemacht
  • Sie hassen IIS-Bereitstellungen
  • Dein alter IT-Job wird langsam langweilig und du wünscht dir, du wärst in einem glänzenden neuen Start Up.

Was zu erwarten ist ...

  • Sie werden sich sicher fühlen mit Express ohne all die Server Bloatware, die Sie nie brauchen.
  • Läuft wie eine Rakete und skaliert gut.
  • Du träumst es. Du hast es installiert. Das Knotenpaket repo npmjs.org ist das größte Ökosystem von Open-Source-Bibliotheken in der Welt.
  • Ihr Gehirn wird im Land der verschachtelten Rückrufe Zeit verlieren ...
  • ... bis du lernst, deine zu behalten Versprechen.
  • Sequelize und Reisepass sind deine neuen API-Freunde.
  • Debugging meist Async-Code wird umm bekommen ... interessant .
  • Zeit für alle Nodes, um zu meistern Typoskript.

Wer benutzt es?

  • PayPal, Netflix, Walmart, LinkedIn, Groupon, Uber, GoDaddy, Dow Jones
  • Hier sind warum sie zu Knoten gewechselt.

105
2018-06-12 13:24



Es gibt nichts wie Silver Bullet. Alles ist mit einigen damit verbundenen Kosten verbunden. Es ist wie wenn Sie fettiges Essen essen, Sie werden Ihre Gesundheit gefährden und gesundes Essen kommt nicht mit Gewürzen wie fettiges Essen. Es ist eine individuelle Wahl, ob sie Gesundheit oder Gewürze wie in ihrer Nahrung wollen. Genau wie Node.js in einem bestimmten Szenario verwendet werden soll. Wenn Ihre App nicht in dieses Szenario passt, sollten Sie sie für Ihre App-Entwicklung nicht berücksichtigen. Ich denke nur an dasselbe:

Wann sollte Node.JS verwendet werden?

  1. Wenn Ihr serverseitiger Code sehr wenige CPU-Zyklen benötigt. In der anderen Welt machen Sie keine blockierende Operation und haben keinen schweren Algorithmus / Job, der viele CPU-Zyklen verbraucht.
  2. Wenn Sie von Javascript zurück Boden und komfortabel in Single-Thread-Code wie Client-Seite JS.

Wenn Node.JS NICHT verwendet werden soll

  1. Ihre Serveranfrage hängt vom Algorithmus / Job mit hohem CPU-Verbrauch ab.

Skalierbarkeitsüberlegung mit Node.JS

  1. Node.JS selbst verwendet nicht den gesamten Kern des zugrunde liegenden Systems und es ist standardmäßig single-threaded, Sie müssen eigene Logik schreiben, um Multi-Core-Prozessor zu verwenden und es multi-threaded zu machen.

Node.JS Alternativen

Es gibt jedoch eine andere Option, die anstelle von Node.JS verwendet werden kann Vert.x scheint vielversprechend zu sein und hat viele zusätzliche Funktionen wie Polygot und bessere Skalierbarkeitsüberlegungen.


60
2018-04-05 17:17