À quelle vitesse Javascript est-il comparé à Java?

Existe-t-il des tests permettant de comparer les performances de Javascript avec celles de Java?

MISE À JOUR: Puisque tout le monde demande pourquoi diable cette question, voici un contexte 🙂

Comme vous le savez tous – j’espère – Javascript aujourd’hui ne réside pas seulement dans le client Web, mais également dans le serveur Web avec node.js.

Il pourrait également être exécuté sur les téléphones mobiles et les postes de travail avec Appcelerator et Phonegap.

Il pourrait également être utilisé de manière substantielle dans le navigateur Web pour permettre à l’utilisateur d’expérimenter la première classe comme avec les applications de bureau.

Mais Java pouvait faire cela aussi en exécutant des applets sur le client Web et sur des téléphones mobiles. C’est aussi un langage pour le backend avec de nombreux frameworks à choisir.

Étant donné que chacun d’entre eux pouvait se remplacer presque entièrement dans la zone mentionnée, je souhaite connaître la différence de performance entre eux, pour tous les cas que j’ai décrits:

  • Client: Applets Java vs Javascript
  • Serveur: Java EE vs Javascript avec Node.js + Express
  • Téléphones portables: Java ME vs Javascript avec Phonegap / Appcelerator
  • Desktop: Java SE vs Javascript avec Phonegap / Appcelerator

J’espère que le contexte est plus clair maintenant.

Java et JavaScript sont les deux langages de programmation. Les langages de programmation ne sont qu’un ensemble de règles mathématiques abstraites. Les langages de programmation ne sont pas rapides. Ou lent. Ils sont juste

La performance d’une application n’a rien à voir avec la langue. Le facteur le plus important est l’architecture de l’application. Vient ensuite l’efficacité algorithmique. Puis micro-optimisations. Vient ensuite la qualité du compilateur / interprète. Ensuite, le CPU. Peut-être quelques autres étapes entre les deux. Le langage, cependant, ne joue pas directement de rôle. (Et bien sûr, si vous parlez de benchmarks, le benchmark joue également un rôle, tout comme la qualité de la mise en œuvre du benchmark, le niveau de performance du benchmark, et, plus important encore, les statistiques.En outre, la définition précise de ce que vous entendez par «rapide» est très importante, car elle peut également avoir une influence significative sur le benchmark.)

Cependant, le langage peut jouer indirectement un rôle: il est beaucoup plus facile de trouver et de corriger les goulots d’étranglement de performance dans 10 lignes de code Lisp de haut niveau, très expressif, clair, concis, lisible, bien factorisé et isolé. emmêlé, bas niveau C. (Notez que ces deux langues ne sont que des exemples. Je ne veux pas exclure une seule langue.) Twitter, par exemple, a dit qu’avec un langage moins expressif que Ruby, elles ne le feraient pas. ont été en mesure d’apporter des modifications radicales à leur architecture en si peu de temps, afin de résoudre leurs problèmes d’évolutivité. Et la raison pour laquelle Node.js est capable de fournir de si bonnes performances d’E / S avec événements est que la bibliothèque standard de JavaScript est tellement minable. (De cette façon, Node.js doit fournir toutes les E / S elles-mêmes, afin de pouvoir les optimiser pour les E / S événementielles à partir de zéro. Ruby et Python, par exemple, ont des bibliothèques d’E / S fonctionnant aussi bien que Node.js et sont beaucoup plus matures … mais Ruby et Python ont déjà de grandes bibliothèques standard, y compris des bibliothèques d’E / S, toutes synchrones et ne jouant pas bien avec les bibliothèques événementielles. des bibliothèques d’E / S qui ne fonctionnent pas correctement avec les E / S avec événement, car JavaScript ne possède pas de bibliothèque d’E / S.)

Mais si vous voulez vraiment comparer les deux, voici un sharepoint données intéressant pour vous: HotSpot, une des implémentations JVM les plus populaires et les plus performantes, a été créée par une équipe composée, entre autres, un gars nommé Lars Bak. Mais en réalité, HotSpot ne semblait pas démodé, il était basé sur le code source de la VM Anamorphic Smalltalk, créée par une équipe composée, entre autres, d’un gars nommé Lars Bak.

La V8, qui est l’une des implémentations JavaScript les plus populaires et les plus performantes, a été créée par une équipe composée, entre autres, d’un gars nommé Lars Bak. Mais en réalité, le V8 ne semblait pas démodé, il était basé sur le code source de la VM Anamorphic Smalltalk, créée par une équipe composée, entre autres, d’un gars nommé Lars Bak.

Étant donné que les deux sont plus ou moins les mêmes, on peut s’attendre à des performances similaires. La seule différence est que HotSpot compte plus d’une centaine d’ingénieurs qui y travaillent depuis 15 ans, alors que V8 compte une douzaine d’ingénieurs travaillant depuis moins de 5 ans. C’est la seule différence de performance. Il ne s’agit pas de typage statique ou dynamic (Java est statiquement typé, mais la plupart des JVM et certainement HotSpot ne font aucune optimisation statique, toutes les optimisations sont purement dynamics), compilation ou interprétation (HotSpot est interprété avec un compilateur JIT supplémentaire) est purement compilé), haut niveau vs bas niveau. C’est purement de l’argent.

Mais je parie que pour chaque paire d’implémentations Java et JavaScript où l’implémentation Java est plus rapide, je peux trouver une autre paire où l’implémentation JavaScript est plus rapide. De plus, je peux probablement garder la paire et utiliser un autre benchmark. Il y a une raison pour appeler le jeu de benchmark sur les langages informatiques un “jeu”: ils vous encouragent même sur leur propre page à jouer avec les benchmarks pour faire monter n’importe quelle langue arbitraire.

Je n’ai qu’une anecdote à append: j’ai récemment réimplémenté un serveur Java calc (finance) en Javascript (nodejs v0.6.8). Le temps de développement WRT, l’implémentation Javascript était un jeu d’enfant par rapport à l’implémentation Java d’origine avec beaucoup moins de lignes de code. C’était une bouffée d’air frais, vraiment.

Le serveur basé sur Javascript est capable d’effectuer des calculs via 2.4k trades / s alors que le serveur Java gère 400 + / sec sur le même matériel en utilisant moins de mémoire. Je n’atsortingbuerais pas l’augmentation de la vitesse aux performances brutes V8 vs Java 7 mais plutôt à l’implémentation. L’implémentation de Javascript utilise beaucoup moins de structures de données, effectue un ordre de grandeur moins élevé d’appels de méthodes et adopte une approche plus simple et concise.

Inutile de dire que je suis très content de la performance de node.js. Et ceci, venant de quelqu’un qui était Java seulement pour beaucoup (9) ans.

Voici quelques tests comparant Javascript (V8) et Java compilé:

  • 32 bits
  • 64 bits

Ils indiquent que Java est généralement plus rapide 1 . Cependant, si vous explorez avec ces pages et les ressources liées, vous remarquerez qu’il est très difficile de comparer les choses avec les mêmes.

Fait intéressant, Javascript fait nettement mieux que Java (sous certaines conditions) pour le benchmark “regex-dna”. J’imagine que c’est parce que le moteur de regex Javascript est plus rapide que le moteur de regex Java. Cela n’est pas totalement surprenant, compte tenu de l’importance des expressions rationnelles dans les applications Javascript classiques.

1 – Ssortingctement parlant, vous ne pouvez pas dire que la langue X est plus rapide que la langue Y. Vous ne pouvez comparer que des implémentations spécifiques des langues respectives. Et le site auquel je suis lié est clair à ce sujet … si vous voulez passer par la première page. Cependant, il n’est pas totalement déraisonnable de généraliser à partir de points de données spécifiques … et de l’absence apparente de points de données contradictoires … que Java est généralement plus rapide que Javascript dans les tâches de calcul intensif. Mais le revers de la médaille est que ce type de performance n’est souvent pas un critère objectivement important.

Java, évidemment.

Les programmeurs aiment comparer la vitesse d’exécution comme une sorte de contenu piquant. Ce n’est qu’une mésortingque, et la plupart du temps, ce n’est pas la plus importante à long terme. Java est un langage qui se distingue par sa rapidité pour presque tout, mais par un niveau suffisamment élevé pour obtenir des éléments comme le GC, que vous n’obtenez généralement pas dans des langues similaires. Javascript est un langage de fermeture dynamic idéal pour les tâches rapides (et pour les programmeurs de FP coincés dans un monde OO ;-)). Il n’y a pas beaucoup d’intersection dans les espaces où l’un ou l’autre serait approprié.

Je vais arrêter de pontifier maintenant

EDIT: pour adresser l’édition dans le post

En raison de la façon dont on écrit du javascript idiomatique (fonctions composées de fonctions), il se prête étonnamment bien à la programmation asynchrone, probablement mieux que tout autre langage de popularité similaire. Node.js brille quand il s’agit d’un grand nombre de connexions courtes, donc javascript est vraiment adapté à ce genre de choses.

Alors que node.js est absolument génial, le fait que ce soit le nouveau hotness ne signifie pas vraiment que c’est le meilleur de tout, peu importe ce que dit le battage médiatique. Si une application Java est remplaçable par nœud, il est fort probable que Java ne soit pas vraiment approprié en premier lieu.

Probablement pas, mais ça n’a pas vraiment d’importance.

Avant JavaScript JIT de Google Chrome, Java gagnerait en JavaScript dès que le problème deviendrait suffisamment important pour dépasser le temps de chargement.

Java devrait toujours tromper complètement JavaScript en raison des maths de type entier ou flottant. Peu importe la qualité du JIT, il ne peut pas vraiment compenser cela.

http://benchmarksgame.alioth.debian.org/u64q/javascript.html

(N’oubliez pas de regarder la colonne CPU aussi bien que les secondes écastings).

Selon le lien ci-dessus, le JavaScript, en tant que réalité, est maintenant beaucoup plus lent pour presque tout.

Ils ne sont que des noms similaires, c’est tout. Java est compilé alors que JavaScript est interprété (principalement). Même avec le compilateur juste à temps de V8, Java est plus rapide à tout.