75 votes

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

Existe-il des tests qui comparent les performances de Javascript avec Java?

Mise à JOUR: Puisque tout le monde est de se demander pourquoi l'enfer de cette question, voici le contexte :)

Comme vous le savez tous - je l'espère - Javascript aujourd'hui n'est pas seulement résider dans le client web, mais aussi dans le serveur web node.js.

Il pourrait également être exécuté dans les téléphones mobiles et dekstops avec appcelerator et phonegap.

Il pourrait également être utilisé de manière substantielle dans le navigateur web pour permettre à l'utilisateur une expérience de première classe avec des applications de bureau.

Mais Java pourrait faire ces choses, pour exécuter des applets sur le client web, et sur les téléphones mobiles. C'est aussi un langage pour le backend avec de nombreux cadres de choisir entre les deux.

Puisque chacun d'entre eux pourrait presque/remplacer entièrement les uns des autres dans la zone mentionnée, je veux savoir la différence de performances entre eux, pour tous les cas que j'ai décrit:

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

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

119voto

Jörg W Mittag Points 153275

Java et JavaScript sont deux langages de programmation. Les langages de programmation sont juste un tas de résumé des règles mathématiques. Les langages de programmation ne sont pas rapide. Ou lente. Ils ont juste sont.

Les performances d'une application n'a rien à voir avec la langue. Le facteur le plus important est l'architecture de l'application. Puis vient algorithmique de l'efficacité. Ensuite, micro-optimisations. Vient ensuite la qualité du compilateur/interpréteur. Puis le PROCESSEUR. Peut-être un couple de d'autres étapes entre les deux. La langue, cependant, n'est pas directement un rôle à jouer. (Et bien sûr si vous parlez des points de référence, puis aussi le particulier de référence joue un rôle, ainsi que les moyens mis en œuvre dans de l'indice de référence est de savoir comment il est, si le gars qui effectue le test fait en sait quelque chose à propos de l'analyse comparative, et plus important encore les statistiques. Aussi, la précision de la définition de ce que tu veux dire par "rapide" est très important, car il peut aussi avoir une influence importante sur l'indice de référence.)

Cependant, la langue pourrait indirectement un rôle à jouer: il est beaucoup plus facile à trouver et corriger les goulots d'étranglement des performances en 10 lignes de très expressif, clair, concis, lisible, bien factorisé, isolé, haut niveau du code Lisp, que dans les 100 lignes de enchevêtrées, de bas niveau C. (à Noter que ces deux langues ne sont que des exemples. Je ne veux pas unique n'importe quelle langue.) Twitter, par exemple, ont dit qu'avec un moins le langage expressif que le Rubis, ils n'auraient pas été en mesure de faire de tels changements radicaux à leur architecture dans un court laps de temps, à résoudre leurs problèmes d'évolutivité. Et la raison pourquoi Node.js est en mesure de fournir la bonne evented performance I/O est parce que le JavaScript de la bibliothèque standard est tellement merdique. (De cette façon, Node.js doit fournir toutes les I/O lui-même, afin qu'ils puissent optimiser pour evented I/O à partir du sol. Ruby et Python, par exemple, ont evented bibliothèques d'e/S qui fonctionnent tout aussi bien comme Node.js et sont beaucoup plus mature ... mais, Ruby et Python ont déjà de grandes bibliothèques standard, y compris les bibliothèques d'e/S, qui sont synchrones et ne joue pas bien avec evented bibliothèques. JavaScript n'est pas le problème des bibliothèques d'e/S qui ne jouent pas bien avec evented I/O, parce que JavaScript n'a pas de bibliothèques d'e/S à tous.)

Mais si vous vraiment voulez comparer les deux, voici un intéressant point de données pour vous: HotSpot, qui est l'un des plus populaire, et aussi plus performant JVM implémentations là-bas, a été créé par une équipe de gars qui comprenait, entre autres personnes, un gars du nom de Lars Bak. Mais en fait, HotSpot ne semble pas hors de l'air mince, il était basé sur le code source de la Anamorphique Smalltalk VM, qui a été créé par une équipe de gars qui comprenait, entre autres personnes, un gars du nom de Lars Bak.

V8, qui est l'un des plus populaire, et aussi plus performant JavaScript implémentations là-bas, a été créé par une équipe de gars qui comprenait, entre autres personnes, un gars du nom de Lars Bak. Mais en fait, le V8 ne semble pas hors de l'air mince, il était basé sur le code source de la Anamorphique Smalltalk VM, qui a été créé par une équipe de gars qui comprenait, entre autres personnes, un gars du nom de 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 a plus d'une centaine d'ingénieurs travaillent depuis 15 ans, tandis que le V8 a une douzaine d'ingénieurs de travail pour les moins de 5 ans. C' est la seule différence dans les performances. Il n'est pas statique vs dynamique de frappe (Java est statiquement typé, mais la plupart des machines virtuelles et certainement HotSpot font pas statique optimisations que ce soit, toutes les optimisations sont purement dynamique), la compilation vs interprétation (HotSpot est en fait interprété avec un autre compilateur JIT, alors que le V8 est purement compilé), de haut niveau et de bas niveau. C'est purement une question d'argent.

Mais je vais le pari que, pour chaque paire de Java et de JavaScript implémentations où l'implémentation de Java est plus rapide, je peux trouver une autre paire où le JavaScript de la mise en œuvre est plus rapide. Aussi, je peux probablement garder la paire et il suffit d'utiliser un autre indice de référence. Il y a une raison à l'appel de l'Ordinateur Langues de Référence Jeu "jeu": ils ont même encourager vous droit sur leur propre page pour jouer avec les repères de faire n'importe quelle langue remontent à la surface.

37voto

kls Points 171

Je n'ai qu'une anecdote à ajouter: j'ai récemment ré-implémenté un Java calc serveur (ministère des finances) en Javascript (nodejs v0.6.8). WRT temps de développement, le Javascript de la mise en œuvre a été un jeu d'enfant par rapport à l'original Java mise en œuvre avec beaucoup moins de lignes de code. C'était une bouffée d'air frais, vraiment.

Le Javascript serveur est en mesure de calc à travers 2.4 k opérations/sec alors que le serveur Java gère 400+/sec sur le même matériel en utilisant moins de mémoire. Je ne voudrais pas l'attribut de l'augmentation de la vitesse de raw V8 vs Java 7 performance, mais plutôt à la mise en œuvre. Le Javascript de la mise en œuvre utilise beaucoup moins de structures de données, un ordre de grandeur moins d'appels de méthode et prend une plus straight-forward et laconique approche.

Inutile de dire que je suis très heureux de la performance de node.js. Et ce, venant de quelqu'un qui a été Java seulement pour la plupart (9) ans.

30voto

Stephen C Points 255558

Ici sont quelques-uns des tests de comparaison de Javascript (V8) et compilé en Java, et ils indiquent que Java est généralement plus rapide1. Toutefois, si vous creusez autour avec cette page et les ressources liées, vous remarquerez qu'il est très difficile de comparer des choses comparables.

Fait intéressant, le Javascript n'nettement mieux que Java (sous certaines conditions) pour le "regex de l'adn" de référence. Je suppose que c'est parce que le Javascript moteur d'expressions régulières est plus rapide que Java moteur d'expressions régulières. Ce n'est pas entièrement surprenant, compte tenu de l'importance de regexes typiques des applications Javascript.

1 - Strictement parlant, on ne peut pas dire que le langage X est plus rapide que la langue Y. Vous ne pouvez comparer spécifiques implémentations des langues respectives. Et le site que j'ai lié à est claire à ce sujet ... si vous tenez à aller dans via la page d'accueil. Cependant, il n'est pas tout à fait déraisonnable de généraliser à partir de points de données spécifiques ... et l'apparente absence de contradictions dans les points de données ... que Java est généralement plus rapide que le Javascript dans les tâches de calcul intensif. Mais le revers de la médaille est que ce genre de performance est souvent pas objectivement un critère important.

10voto

Matt Briggs Points 20291

Java, évidemment.

Les programmeurs de l'amour pour comparer la vitesse d'exécution, comme une sorte de pisser contenu. C'est juste une métrique, et la majorité du temps, pas le plus important, un par un long shot. Java est un langage qui a un mélange d'être assez rapide pour presque tout, mais assez haut niveau que vous obtenez des trucs comme GC, vous n'avez pas l'habitude de faire dans les mêmes langues. Javascript est une dynamique de fermeture de la langue qui est idéal pour obtenir des trucs fait rapidement (et pour les FP programmeurs coincé dans un monde orienté objet ;-) ). Il n'y a pas beaucoup de la manière de l'intersection, dans les espaces où l'un ou l'autre serait approprié.

Je vais arrêter ostentation maintenant

EDIT: à l'adresse de l'edit dans le post

En raison de la façon dont on écrit idiomatiques javascript (fonctions composée de fonctions), il se prête étonnamment bien à la programmation asynchrone, sans doute mieux que toute autre langue de semblable popularité. Node.js brille quand il s'agit d'une énorme quantité de courte connexions, afin de javascript est vraiment idéal pour ce genre de chose.

Alors que node.js est absolument trempé dans awesome, qui est le nouveau hotness vraiment ne signifie pas qu'il est le meilleur en tout, peu importe ce que l'exagération dit. Si une application java est remplaçable par nœud, les chances sont que java n'était pas vraiment approprié dans la première place.

7voto

Joshua Points 13231

Probablement pas, mais cela n'a pas vraiment d'importance.

Avant le JIT JavaScript de Google Chrome, Java l'emporterait sur JavaScript dès que le problème s'aggraverait suffisamment pour surmonter le temps de chargement.

Java devrait encore contourner JavaScript en raison du calcul mathématique entier / flottant. Peu importe la qualité de l'EJI, il ne peut pas compenser cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X