Java und JavaScript sind beide Programmiersprachen. Programmiersprachen sind nur ein Bündel abstrakter mathematischer Regeln. Programmiersprachen sind nicht schnell. Oder langsam. Sie gerade sind .
Die Leistung einer Anwendung hat nichts mit der Sprache zu tun. Der wichtigste Faktor ist die Anwendungsarchitektur. Dann kommt die algorithmische Effizienz. Dann Mikrooptimierungen. Dann kommt die Qualität des Compilers / Interpreters. Dann die CPU. Vielleicht ein paar andere Schritte dazwischen. Die Sprache spielt jedoch keine direkte Rolle. (Und wenn Sie über Benchmarks sprechen, spielt natürlich auch der jeweilige Benchmark eine Rolle, sowie wie gut der Benchmark implementiert ist, wie gut er ausgeführt wird, ob der Typ, der den Benchmark durchführt, tatsächlich etwas über Benchmarking weiß . und noch wichtiger Statistiken. Auch das genaue Definition dessen, was Sie tatsächlich meinenvon "schnell" ist ziemlich wichtig, da es auch einen signifikanten Einfluss auf die Benchmark haben kann.)
Die Sprache könnte jedoch indirekt eine Rolle spielen: Es ist viel einfacher, Leistungsengpässe in 10 Zeilen ausdrucksstarken, klaren, präzisen, lesbaren, gut faktorisierten, isolierten Lisp-Codes auf hoher Ebene zu finden und zu beheben als in 100 Zeilen Wirrwarr, niedriges C. (Beachten Sie, dass diese beiden Sprachen nur Beispiele sind. Ich möchte keine Sprache herausgreifen.) Twitter hat beispielsweise gesagt, dass dies mit einer weniger ausdrucksstarken Sprache als Ruby nicht der Fall wäre konnten in so kurzer Zeit so radikale Änderungen an ihrer Architektur vornehmen, um ihre Skalierbarkeitsprobleme zu beheben. Der Grund, warum Node.js eine so gute E / A-Leistung bieten kann, liegt darin, dass die Standardbibliothek von JavaScript so beschissen ist. (Auf diese Weise muss Node.js alle E / A selbst bereitstellen, damit sie von Grund auf für ereignisgesteuerte E / A optimiert werden können. Ruby und Python, Zum Beispiel haben E / A-Bibliotheken, die genauso gut funktionieren wie Node.js und viel ausgereifter sind, ereignisreich ... Ruby und Python haben jedoch bereits große Standardbibliotheken, einschließlich E / A-Bibliotheken, die alle synchron und don sind spielen nicht gut mit ereignisreichen Bibliotheken. JavaScript hat nicht das Problem von E / A-Bibliotheken, die mit ereignisgesteuerten E / A nicht gut funktionieren, da JavaScript keine E / A-Bibliotheken hatüberhaupt .)
Aber wenn Sie die beiden wirklich vergleichen möchten, ist hier ein interessanter Datenpunkt für Sie: HotSpot, eine der beliebtesten und auch leistungsfähigeren JVM-Implementierungen, wurde von einem Team von Leuten erstellt, zu denen unter anderem gehörten: ein Typ namens Lars Bak. Tatsächlich erschien HotSpot jedoch nicht aus dem Nichts, sondern basierte auf dem Quellcode der anamorphotischen Smalltalk-VM, die von einem Team von Leuten erstellt wurde, zu denen unter anderem ein Mann namens Lars Bak gehörte.
V8, eine der beliebtesten und auch leistungsfähigsten JavaScript-Implementierungen, wurde von einem Team von Leuten entwickelt, zu denen unter anderem ein Mann namens Lars Bak gehörte. Tatsächlich erschien V8 jedoch nicht aus dem Nichts, sondern basierte auf dem Quellcode der anamorphotischen Smalltalk-VM, die von einem Team von Leuten erstellt wurde, zu denen unter anderem ein Mann namens Lars Bak gehörte.
Angesichts der Tatsache, dass beide mehr oder weniger gleich sind, können wir eine ähnliche Leistung erwarten. Der einzige Unterschied besteht darin, dass in HotSpot 15 Jahre lang über hundert Ingenieure daran arbeiten, während in V8 ein Dutzend Ingenieure weniger als 5 Jahre lang arbeiten. Das ist der einzige Leistungsunterschied. Es geht nicht um statische oder dynamische Typisierung (Java ist statisch typisiert, aber die meisten JVMs und sicherlich HotSpot nehmen keinerlei statische Optimierungen vor, alle Optimierungen sind rein dynamisch), Kompilierung oder Interpretation (HotSpot wird tatsächlich mit einem zusätzlichen JIT-Compiler interpretiert, während V8 ist rein kompiliert), High-Level vs. Low-Level. Es geht nur um Geld.
Aber ich wette, dass ich für jedes Paar von Java- und JavaScript-Implementierungen, bei denen die Java-Implementierung schneller ist, ein anderes Paar finden kann, bei dem die JavaScript-Implementierung schneller ist. Außerdem kann ich das Paar wahrscheinlich behalten und einfach einen anderen Benchmark verwenden. Es gibt einen Grund, warum das Computersprachen-Benchmark-Spiel als "Spiel" bezeichnet wird: Sie ermutigen Sie sogar , direkt auf ihrer eigenen Seite mit den Benchmarks herumzuspielen, um eine beliebige Sprache an die Spitze zu bringen.