Насколько быстро Javascript по сравнению с Java?

Есть ли тесты, которые сравнивают производительность Javascript с Java?

ОБНОВЛЕНИЕ: Поскольку каждый спрашивает, почему, черт возьми, этот вопрос, вот какой-то контекст:)

Как вы все знаете - я надеюсь - Javascript в настоящее время не только находится в веб-клиенте, но и на веб-сервере с node.js.

Он также может быть запущен в мобильных телефонах и дескриптах с помощью appcelerator и phonegap.

Он также может быть использован в основном в веб-браузере, чтобы пользователь стал первым классом, например, с настольными приложениями.

Но Java тоже может делать это, запускать апплеты на веб-клиенте и на мобильных телефонах. Это также язык для бэкэнд со многими каркасами на выбор.

Поскольку каждый из них может почти/полностью заменить друг друга в указанной области, я хочу знать разницу в производительности между ними, для каждого описанного вами случая:

  • Клиент: Java-апплеты против Javascript
  • Сервер: Java EE vs Javascript с node.js + Express
  • Мобильные телефоны: Java ME против Javascript с Phonegap/Appcelerator
  • Рабочий стол: Java SE против Javascript с помощью Phonegap/Appcelerator

Надеюсь, теперь контекст станет более ясным.

Ответ 1

Java и JavaScript - оба языка программирования. Языки программирования - всего лишь куча абстрактных математических правил. Языки программирования не бывают быстрыми. Или медленно. Они просто есть.

Производительность приложения не имеет ничего общего с языком. Важнейшим фактором является архитектура приложения. Затем идет алгоритмическая эффективность. Затем микро-оптимизации. Затем приходит качество компилятора/интерпретатора. Затем процессор. Может быть, еще несколько шагов. Язык, однако, не играет прямой роли. (И, конечно, если вы говорите о контрольных показателях, то и конкретный бенчмарк играет определенную роль, а также насколько хорошо реализован эталон, насколько хорошо он работает, независимо от того, знает ли парень, который выполняет эталон, что-то о бенчмаркинге, и, что еще важнее, статистические данные. Кроме того, точное определение того, что вы на самом деле подразумеваете под "быстрым", очень важно, так как оно также может оказывать значительное влияние на эталон.)

Однако язык может косвенно играть определенную роль: гораздо легче найти и устранить узкие места производительности в 10 строках очень выразительного, четкого, сжатого, читаемого, хорошо продуманного, изолированного, высокоуровневого Lisp кода, чем в 100 линиях запутанных, низкоуровневых C. (Обратите внимание, что эти два языка - это только примеры. Я не хочу выпустить ни одного языка.) Twitter, например, сказал, что с менее выразительным языком, чем Ruby, они не смогли бы внести столь радикальные изменения в свою архитектуру за столь короткий промежуток времени, чтобы устранить свои проблемы с масштабируемостью. И причина, по которой Node.js может обеспечить такую ​​хорошую производительность ввода-вывода, вызвана тем, что стандартная библиотека JavaScript настолько дрянной. (Таким образом, Node.js должен предоставить все сам I/O, поэтому они могут оптимизировать его для ввода/вывода с первого раза. Ruby и Python, например, создали библиотеки ввода-вывода, которые работают так же, как и а также Node.js и гораздо более зрелые... но у Ruby и Python уже есть большие стандартные библиотеки, в том числе библиотеки ввода-вывода, все из которых синхронны и не очень хорошо воспроизводятся с выделенными библиотеками. t имеют проблемы с библиотеками ввода-вывода, которые плохо воспроизводятся с событиями ввода-вывода, потому что JavaScript вообще не имеет библиотек ввода-вывода.)

Но если вы действительно хотите сравнить эти два, вот вам интересный datapoint: HotSpot, который является одним из наиболее популярных и более реалистичных реализаций JVM, был создан группой парней, которая включала среди другие люди, парень по имени Ларс Бак. Но на самом деле, HotSpot не проявлялся из-за шума, он был основан на исходном коде Anamorphic Smalltalk VM, который был создан группой парней, в которую, среди других людей, входил парень по имени Ларс Бак.

V8, который является одним из наиболее популярных, а также более реалистичных реализаций JavaScript, был создан группой парней, в которую, среди прочего, входил парень по имени Ларс Бак. Но на самом деле, V8 не появился из-под воздуха, он был основан на исходном коде Anamorphic Smalltalk VM, который был создан группой парней, в которую, среди других людей, входил парень по имени Ларс Бак.

Учитывая, что эти два более или менее одинаковы, мы можем ожидать аналогичную производительность. Единственное различие заключается в том, что в HotSpot работает более ста инженеров, работающих на нем уже 15 лет, тогда как V8 имеет дюжину инженеров, работающих менее 5 лет. Это единственная разница в производительности. Это не о статической и динамической типизации (Java статически типизирована, но большинство JVM и, конечно же, HotSpot не делают никаких статических оптимизаций вообще, все оптимизации чисто динамичны), компиляция и интерпретация (HotSpot фактически интерпретируется с помощью дополнительного JIT-компилятора, тогда как V8 чисто компилируется), высокий уровень и низкий уровень. Это чисто деньги.

Но я готов поспорить, что для каждой пары реализаций Java и JavaScript, где реализация Java быстрее, я могу найти другую пару, где реализация JavaScript выполняется быстрее. Кроме того, я могу, возможно, сохранить пару и просто использовать другой тест. Есть причина, по которой компьютерная игра Computer Languages ​​Benchmark Game называется "игра": они даже поощряют вас прямо на своей странице, чтобы поиграть с эталонами, чтобы любой произвольный язык поднялся на вершину.

Ответ 2

У меня есть только анекдот для добавления: Недавно я повторно реализовал сервер Java calc (finance) в Javascript (nodejs v0.6.8). Время разработки WRT, реализация Javascript была легкой по сравнению с исходной реализацией Java с гораздо меньшим количеством строк кода. На самом деле это был глоток свежего воздуха.

Сервер на основе Javascript способен вычислять через 2.4k сделок/сек, тогда как сервер Java обрабатывает 400 +/сек на одном и том же аппаратном обеспечении, используя меньше памяти. Я бы не стал приписывать увеличение скорости необработанной версии V8 против производительности Java 7, а скорее реализации. Реализация Javascript использует гораздо меньше структур данных, на порядок меньшее количество вызовов методов и использует более прямой и краткий подход.

Излишне говорить, что я очень доволен производительностью node.js. И это, исходя из того, кто был Java только для многих (9) лет.

Ответ 3

Вот несколько тестов, сравнивающих Javascript (V8) и скомпилированную Java:

Они показывают, что Java, как правило, быстрее 1. Однако, если вы копаетесь с этими страницами и связанными ресурсами, вы заметите, что сравнивать их очень сложно.

Интересно, что Javascript значительно лучше, чем Java (при определенных условиях) для теста "regex-dna". Я предполагаю, что это связано с тем, что механизм регулярных выражений Javascript быстрее, чем механизм регулярных выражений Java. Это не совсем неудивительно, учитывая важность регулярных выражений в типичных приложениях Javascript.

1 - Строго говоря, вы не можете сказать, что язык X быстрее, чем язык Y. Вы можете сравнивать только конкретные реализации соответствующих языков. И сайт, на котором я связан, ясен об этом... если вы хотите войти через первую страницу. Однако не совсем необоснованно обобщать конкретные данные... и очевидность отсутствия противоречивых данных... что Java, как правило, быстрее, чем Javascript, в вычислительно-интенсивных задачах. Но обратная сторона заключается в том, что такая производительность часто не является объективно важным критерием.

Ответ 4

Java, очевидно.

Программисты любят сравнивать скорость исполнения, как своего рода pissing-контент. Это всего лишь одна метрика, и большая часть времени, а не самая важная, длинным выстрелом. Java - это язык, который сочетается с тем, что он достаточно быстр для почти любого, но достаточно высокого уровня, который вы получаете, например, GC, который вы обычно не получаете на похожих языках. Javascript - это динамический язык закрытия, который отлично подходит для быстрого создания (и для программистов FP, застрявших в мире OO;-)). Существует не так много способов пересечения в пространствах, где это было бы уместно.

Сейчас я остановлюсь на pontificating

РЕДАКТИРОВАТЬ: обратиться к редактированию в сообщении

Из-за того, как вы пишете идиоматический javascript (функции, состоящие из функций), он на удивление отлично подходит для асинхронного программирования, вероятно, лучше, чем любой другой язык с такой же популярностью. Node.js светит, когда дело доходит до огромного количества коротких соединений, поэтому javascript действительно подходит для такого рода вещей.

В то время как Node.js абсолютно пропитан потрясающе, поскольку новая жара действительно не означает, что она лучшая во всем, независимо от того, что говорит шумиха. Если java-приложение заменяется на node, скорее всего, java действительно не подходит в первую очередь.

Ответ 5

Возможно, нет, но это не имеет большого значения.

До JIT JavaScript в Google Chrome JavaScript Java победит JavaScript, как только проблема станет достаточно большой, чтобы преодолеть время загрузки.

Java по-прежнему должна полностью запускать JavaScript из-за целочисленной или плавающей математики. Независимо от того, насколько хорошо JIT это не может реально компенсировать это.

Ответ 6

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

(Не забудьте посмотреть столбец cpu как-хорошо, как истекшие секунды).

В соответствии с приведенной выше ссылкой JavaScript, поскольку реальность стоит сейчас, намного медленнее почти для всего.

Ответ 7

Они только похожи по имени, что это. Java компилируется, когда JavaScript интерпретируется (в основном). Даже с V8 как раз вовремя компилятор Java быстрее во всем.