Gibt es Tests, die die Leistung von Javascript mit der von Java vergleichen?
UPDATE: Da jeder fragt, warum zum Teufel diese Frage, hier ist ein Zusammenhang :)
Wie Sie alle wissen - ich hoffe - befindet sich Javascript heutzutage nicht nur im Webclient, sondern auch auf dem Webserver mit node.js.
Es könnte auch in Mobiltelefonen und Dekstops mit Appcelerator und Phonegap ausgeführt werden.
Es könnte auch wesentlich im Webbrowser verwendet werden, um die Benutzererfahrung erstklassig zu machen, wie bei Desktop-Anwendungen.
Aber Java könnte diese Dinge auch tun, indem es Applets auf dem Webclient und auf Mobiltelefonen ausführt. Es ist auch eine Sprache für das Backend mit vielen Frameworks zur Auswahl.
Da sich jeder von ihnen in dem genannten Bereich fast / vollständig ersetzen könnte, möchte ich den Leistungsunterschied zwischen ihnen für jeden von mir beschriebenen Fall kennen:
- Client: Java Applets vs Javascript
- Server: Java EE vs Javascript mit Node.js + Express
- Handys: Java ME vs Javascript mit Phonegap / Appcelerator
- Desktop: Java SE vs Javascript mit Phonegap / Appcelerator
Ich hoffe, der Kontext ist jetzt klarer.
quelle
Antworten:
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.
quelle
Ich muss nur eine Anekdote hinzufügen: Ich habe kürzlich einen Java-Calc-Server (Finanzen) in Javascript (nodejs v0.6.8) neu implementiert. In der WRT-Entwicklungszeit war die Javascript-Implementierung im Vergleich zur ursprünglichen Java-Implementierung mit weitaus weniger Codezeilen ein Kinderspiel. Es war wirklich ein Hauch frischer Luft.
Der Javascript-basierte Server kann 2,4.000 Trades / Sek. Berechnen, während der Java-Server 400 + / Sek. Auf derselben Hardware mit weniger Speicher verarbeitet. Ich würde die Geschwindigkeitssteigerung nicht auf die Leistung von V8 im Vergleich zu Java 7 zurückführen, sondern auf die Implementierung. Die Javascript-Implementierung verwendet weitaus weniger Datenstrukturen, führt eine Größenordnung weniger Methodenaufrufe durch und verfolgt einen einfacheren und knapperen Ansatz.
Ich bin natürlich sehr zufrieden mit der Leistung von node.js. Und das von jemandem, der nur viele (9) Jahre lang Java war.
quelle
number-crunching
Anwendungen verglichen . NodeJS war nur 2,5 mal langsamer als C.Hier sind einige Tests zum Vergleich von Javascript (V8) und kompiliertem Java:
Sie zeigen an, dass Java im Allgemeinen schneller ist 1 . Wenn Sie sich jedoch mit diesen Seiten und den verknüpften Ressourcen beschäftigen, werden Sie feststellen, dass es sehr schwierig ist, Gleiches mit Gleichem zu vergleichen.
Interessanterweise schneidet Javascript (unter bestimmten Bedingungen) für den Benchmark "Regex-DNA" deutlich besser ab als Java. Ich vermute, dass dies daran liegt, dass die Javascript-Regex-Engine schneller ist als die Java-Regex-Engine. Dies ist angesichts der Bedeutung von Regexen in typischen Javascript-Anwendungen nicht ganz überraschend.
1 - Genau genommen können Sie nicht sagen, dass Sprache X schneller als Sprache Y ist. Sie können nur bestimmte Implementierungen der jeweiligen Sprachen vergleichen. Und die Seite, auf die ich verlinkt habe, ist klar darüber ... wenn Sie über die Startseite hineingehen möchten. Es ist jedoch nicht völlig unangemessen, anhand bestimmter Datenpunkte zu verallgemeinern ... und das Fehlen fehlender widersprüchlicher Datenpunkte ..., dass Java bei rechenintensiven Aufgaben normalerweise schneller als Javascript ist. Die Kehrseite ist jedoch, dass diese Art der Leistung oft kein objektiv wichtiges Kriterium ist.
quelle
Java natürlich.
Programmierer lieben es, die Ausführungsgeschwindigkeit wie eine Art Pissing Content zu vergleichen. Es ist nur eine Metrik und die meiste Zeit bei weitem nicht die wichtigste. Java ist eine Sprache, die schnell genug für fast alles ist, aber hoch genug, um Dinge wie GC zu bekommen, die man normalerweise nicht in ähnlichen Sprachen bekommt. Javascript ist eine dynamische Abschlusssprache, die sich hervorragend dazu eignet, Dinge schnell zu erledigen (und für FP-Programmierer, die in einer OO-Welt stecken ;-)). In den Räumen, in denen beides angemessen wäre, gibt es nicht viel Schnittpunkte.
Ich werde jetzt aufhören zu päpsteln
BEARBEITEN: um die Bearbeitung im Beitrag zu adressieren
Aufgrund der Art und Weise, wie man idiomatisches Javascript (Funktionen, die aus Funktionen bestehen) schreibt, eignet es sich überraschend gut für asynchrone Programmierung, wahrscheinlich besser als jede andere Sprache mit ähnlicher Popularität. Node.js glänzt, wenn es um eine große Anzahl von Kurzverbindungen geht, daher passt Javascript wirklich gut zu solchen Dingen.
Während node.js absolut fantastisch ist, bedeutet die neue Schärfe nicht, dass es bei allem das Beste ist, egal was der Hype sagt. Wenn eine Java-App durch einen Knoten ersetzt werden kann, war Java wahrscheinlich überhaupt nicht angemessen.
quelle
Wahrscheinlich nicht, aber es spielt keine Rolle.
Vor der JavaScript-JIT von Google Chrome konnte Java JavaScript für sich gewinnen, sobald das Problem groß genug wurde, um die Ladezeit zu überwinden.
Java sollte JavaScript aufgrund von Integer vs. Float-Mathematik immer noch rundum ausschalten. Egal wie gut die JIT ist, sie kann das nicht wirklich ausgleichen.
WebAssembly wird dies ohnehin auf den Kopf stellen.
quelle
http://benchmarksgame.alioth.debian.org/u64q/javascript.html
(Denken Sie daran, die CPU-Spalte sowie die verstrichenen Sekunden zu betrachten.)
Laut dem obigen Link ist JavaScript in der jetzigen Realität für fast alles viel langsamer.
quelle
Sie haben nur einen ähnlichen Namen, das war's. Java wird kompiliert, während JavaScript (meistens) interpretiert wird. Selbst mit dem Just-in-Time-Compiler von V8 ist Java bei allem schneller.
quelle