Если вы хотите увидеть, как складываются различные механизмы JavaScript в браузере, установите Safari 4 (да, он теперь работает и в Windows!), Chrome V8, Firefox 3.5 и IE 8 (если вы используете Windows) и запустить тест:
http://www2.webkit.org/perf/sunspider-0.9/sunspider.html
Я полагаю, что, как сказал Пойнти выше, новый Firefox 3.5 использует TraceMonkey, который также компилирует код для оперативного вмешательства на лету, используя некоторую форму JIT. Так что стоит сравнивать с V8 несколько выгодно. По крайней мере, он не будет в 10 раз медленнее, чем V8, как Firefox 3 SpiderMonkey (без JIT).
Для меня ... Safari 4.0.3 был в 2,5 раза быстрее, чем Tracemonky в Firefox 3.5.3 на Win XP. IE8 был намного медленнее. В данный момент у меня не установлен Chrome.
Не знаю, как Rhino компилируется в байт-код Java. Если он по-прежнему интерпретирует динамические функции Javascript, такие как возможность добавлять атрибуты к экземплярам объектов во время выполнения (пример obj.someNewAttribute = "someValue", что разрешено в Javascript) ... Я не уверен, что он полностью "скомпилирован" "байт-код, и вы можете не получить более высокую производительность, кроме как вам не нужно компилировать из текста исходного кода Javascript при каждом запуске Javascript. Помните, что Javascript допускает очень динамический синтаксис, такой как eval («x = 10; y = 20; z = x * y»); Это означает, что вы можете создавать строки кода, которые компилируются во время выполнения. Вот почему я думаю, что Rhino будет интерпретирован / скомпилирован в смешанном режиме, даже если вы скомпилировали байт-код JVM.
JVM все еще является переводчиком, хотя и очень хорошим с поддержкой JIT. Поэтому мне нравится думать о Rhino-on-JVM как о двух уровнях интерпретатора (интерпретатор-интерпретатор) или интерпретатора ^ 2. Принимая во внимание, что большинство других ваших движков Javascript написаны на C, и поэтому они должны работать как интерпретатор ^ 1. Каждый уровень интерпретатора может добавить 5-10-кратное снижение производительности по сравнению с C или C ++ (например, Perl или Python или Ruby), но с JIT снижение производительности может быть намного ниже, порядка 2-4x. И у JVM есть один из самых надежных и зрелых двигателей JIT.
Таким образом, ваш пробег определенно будет отличаться, и вы, вероятно, выиграете от некоторых серьезных тестов, если вы хотите получить реальный ответ для предполагаемого приложения на собственном оборудовании и ОС.
Носорог не может быть слишком медленным, поскольку я знаю, что многие люди используют его. Я думаю, что его главная привлекательность заключается не в его скорости, а в том, что он прост в написании / легком весе / встраиваемом / интерпретаторе, который связан с библиотеками Java, что делает его идеальным для создания сценариев / настройки / расширения вашего программного проекта. Некоторые текстовые редакторы, такие как UltraEdit, даже встраивают Javascript в качестве альтернативного механизма макросов. Кажется, что каждый программист может довольно легко наткнуться на javascript, так что его легко понять.
Одним из преимуществ Rhino является то, что он работает практически везде, где работает JVM. По моему опыту, попытка получить автономную версию TraceMonkey или SpiderMonkey для сборки и запуска из командной строки может быть немного болезненной в таких системах, как Windows. А встраивание в собственное приложение может занять еще больше времени. Но окупаемость наличия встраиваемого языка стоила бы его для большого проекта по сравнению с необходимостью «свернуть свое» решение мини-сценариев, если вы этого хотите.
Сценарии с Rhino действительно просты, если у вас есть Java и jar rhino, вы просто пишете свой javascript и запускаете его из командной строки. Я все время использую его для простых задач.