Was sind neben der Tatsache, dass node.js in JS und Tornado in Python geschrieben ist, einige der Unterschiede zwischen den beiden? Sie sind beide nicht blockierende asynchrone Webserver, oder? Warum neben der Sprache eine über die andere wählen?
Was sind neben der Tatsache, dass node.js in JS und Tornado in Python geschrieben ist, einige der Unterschiede zwischen den beiden? Sie sind beide nicht blockierende asynchrone Webserver, oder? Warum neben der Sprache eine über die andere wählen?
Antworten:
Der Hauptvorteil von node.js besteht darin, dass alle Bibliotheken asynchron sind, sodass Sie sich nicht viel Gedanken über das Blockieren machen müssen. Es gibt asynchrone Bibliotheken für MySQL, Postgres, Redis usw. Standardmäßig ist alles asynchron.
Python hat eine Bibliothek für alles - aber die meisten dieser Bibliotheken sind nicht asynchron. Um Tornado zu nutzen (und den Prozess nicht zu blockieren), sind spezielle Bibliotheken erforderlich (z. B. können Sie Redis nicht einfach 'pip install' und verwenden, Sie benötigen so etwas wie brukva ), und es gibt viel weniger Tornado-Bibliotheken als node.js-Bibliotheken. Derzeit ist beispielsweise kein asynchroner MySQL-Tornado-Treiber verfügbar (oder zumindest ist mir dies nicht bekannt).
Sie können jedoch immer noch viele Python-Bibliotheken mit Tornado verwenden (solche, die keine E / A ausführen), und die Tornado-Community vergrößert und füllt die Lücken.
Nach meiner Erfahrung ist es einfacher, eine App mit node.js zu schreiben, als mit Tornado. Ich persönlich bin von node.js zu tornado gewechselt, weil es besser in die vorhandene Infrastruktur meines Python-Projekts passt (die Integration zwischen der Django-Site, die HTML-Seiten bereitstellt, und dem Tornado-Server, der Echtzeitfunktionen bereitstellt, war ziemlich schmerzlos).
Wie Rich Bradshaw hervorhebt, ist Node.js in JS geschrieben, was bedeutet, dass Sie das Front-End und das Back-End in derselben Sprache halten und möglicherweise eine Codebasis gemeinsam nutzen können. Für mich ist das ein riesiges Potenzial Nutzen von Node.js . Node wird anscheinend auch mit mehr asynchronen Bibliotheken ausgeliefert.
V8 sollte JS schneller als Python machen, zumindest scheinen Benchmarks dies nahezulegen , aber es spielt möglicherweise keine große Rolle, da sowohl Node.js als auch Tornado (und die meisten anderen Web-Frameworks) Wrapper für native Bibliotheken verwenden. Ein Großteil der Python-Standardbibliothek ist in C geschrieben oder kann durch eine schnellere Alternative ersetzt werden, wodurch potenzielle Unterschiede noch weiter gemindert werden.
Webdienste sind normalerweise E / A-gebunden. Das bedeutet, dass wir die Zeit damit verbringen, auf den Datenspeicher zu warten und die Daten nicht zu verarbeiten. Daher ist der synthetische Geschwindigkeitsunterschied zwischen JS und Python in vielen Anwendungen irrelevant.
node.js verwendet V8, das in Assembler-Code kompiliert wird. Tornado macht das noch nicht.
Davon abgesehen (was für die Geschwindigkeit eigentlich keinen großen Unterschied zu machen scheint) ist es das Ökosystem. Bevorzugen Sie das Ereignismodell von JS oder die Funktionsweise von Python? Sind Sie mit Python- oder JS-Bibliotheken zufriedener?
Nodejs hat auch eine nahtlose Integration / Implementierung von Websockets namens Socket.io. Es behandelt Browser, die Sockets - Ereignisse unterstützen, und bietet Abwärtsabrufkompatibilität für ältere Browser. Die Entwicklung erfordert ein Benachrichtigungsframework oder eine ähnliche ereignisbasierte Programmierung.
Ich würde vorschlagen, dass Sie sich für NodeJS entscheiden, wenn es keine persönliche Präferenz für Python gibt. Ich mag Python sehr, aber für Async wähle ich Tornado anstelle von Node und musste später Schwierigkeiten haben, einen Weg zu finden, um etwas zu tun, oder Bibliotheken mit Async-Unterstützung (wie Cassandra Async in Tests hat, aber nirgendwo konnte ich Cqlengine verwenden async. Musste Mongo wählen, da ich die Frist bereits überschritten habe). In Bezug auf Leistung und Asynchronität ist Node weitaus besser als Tornado.