Как стать автором
Обновить

Комментарии 30

NodeJS вне конкуренции
И это на Windows!
+1! Мой товарищ говорил, что в Линуксе Нод куда быстрее. Все-таки он уделал всех в неродной среде.
В линуксе все быстрей кроме гуи
А вы не пробовали ради интереса увеличить количество итераций раз так в 100? Это вполне может отфильтровать сайд-эффекты от того же JIT'a, которые возможно имеют место быть.
Ой, извините, не заметил, что у вас на графиках среднее время итерации.
Мне так же стало интересно протестировать, чем будет отличаться С# на подобных задачах.

А с этим что-нибуть пробовали?
пока не пробовал
но обязательно попробую, понятно что это пройдет только со своими тестами
Интересный результаты, наводят на позитив :-)

Не очень понятен смысл последних столбцов в таблицах.
И было бы неплохо сделать одинаковый масштаб для графиков XP и семёрки.
а это агрегированный результат, чтобы сразу видеть — если он отличается значит, что то не так
для V8 BS его нет, потому что там надо менять сами тесты
Понял, спасибо. а с предыдущими столбцами помогло трёхкратное перечитывание методики тестирования.
какой смысл в одинаковом масштабе?
сравнивать производительность разного железа?
Жаль нормировка на тактовую частоту не поможет :-( Но было бы интересно сравнить.
да по хорошему надо делать еще один тест
исключить .Net, оставить только три движка
и делать хотя бы 3 прогона с увеличением количества итераций в 10 раз пошагово, чтобы посмотреть линейно ли меняется время.
и убрать V8 BS тесты — они очень тяжелые — много не погоняешь :-)
лучше придумать еще своих полегче
в общем тему есть куда развивать
Почему вы написали такой прекрасный грамотный топик, и тут же пишете комментарий без единого знака препинания и предложениями с маленькой буквы?
Постараюсь писать грамотно.
Спасибо.
Хайль Розенталь!
>Третий игрок — компилятор Javascript от Microsoft. Мне было интересно, какой выигрыш дает использование компилятора, по сравнению с интерпретаторами.

V8 — это компилятор javascript в машинный код, преимущество чего как раз и было продемонстрировано.

Из документаци:

>V8 compiles Javascript source code directly into machine code when it is first executed. There are no intermediate byte codes, no interpreter.
Можно еще взять в тест Rhino.
Быстрый взгляд на сайт не подсказал мне ни одного готового консольного решения для Windows.
Я не силен в Java.
Может знаете способ скормить ему исходный код из файла и получить ответ в консоль?
Немного не понятно:
Для компилятора все файлы скармливались jsc.exe из соответствующей версии .Net Framework и запускался результирующий exe файл.

В подсчете скорости время бралось вместе с созданием exe файла, или только время отработки самого exe файла? Если первое, то это не совсем честный тест. Я бы советывал сделать на C# exe файл, который бы уже запускал Jscript.Net код в памяти. Например, используя вот этот класс.

Похоже .Net как-то инициализирует регулярные выражения, которых в этом тесте в избытке, еще до выполнения кода.

Вы правы. .Net оптимизирует программу, компилируя регулярные выражения при запуске. Это обходится прекомпиляцией регулярок… Но с прекомпиляцией был бы нечестный тест. Т.е. без прекомпиляции тест нечестен, т.к. заведомо проигрышен, с прекомпиляцией тест нечестен, т.к. время прекомпиляции в других движках учитывается.
В подсчете скорости время бралось вместе с созданием exe файла, или только время отработки самого exe файла?


Ни то и ни другое.
Бралось время выполнения каждого теста. Вот код, который запускал тесты:
  1.  
  2. function testresult(name, aloops, overall, average, overall_r, average_r, res){
  3.         return {
  4.                 testname: name,
  5.                 overall_time: overall,
  6.                 loops: aloops,
  7.                 average_time: average,
  8.                 overall_wr_time: overall_r,
  9.                 average_wr_time: average_r,
  10.                 result: res
  11.         };             
  12. }
  13.  
  14. function tester(name, func, reduce_func, start_val, loops){
  15.         var r = start_val;
  16.         var st = new Date();
  17.         var l = loops;
  18.         if(typeof loops == 'object'){
  19.                 if(SEtag in loops) l = loops[SEtag];
  20.                 else l = loops.def;
  21.         }      
  22.         for(var i=0; i<l; i++) r = reduce_func(r,func());
  23.         var ft = (new Date()).getTime() - st.getTime();
  24.         var st = new Date();
  25.         for(var i=0; i<l; i++) func();
  26.         var ft1 = (new Date()).getTime() - st.getTime();
  27.         return testresult(name,l,ft1,ft1/l,ft,ft/l, r);
  28. }
  29.  
  30. function RunTests(res){
  31.         for(var i in tests){
  32.                 res.push(tester(tests[i].name,
  33.                             tests[i].func,
  34.                             tests[i].reduce,
  35.                             tests[i].start,
  36.                             tests[i].loops));
  37.         }      
  38. }
  39.  
  40.  


Что касается регулярок, то все честно. Смотрите код V8 JS — RegExp — там первый цикл теста прокручивается вне теста.
мелкая неточность
16-я строка должна быть 21-й
Спасибо. Не ожидал от Jscript.Net таких позорных результатов…
А можно с Jscript.Net тесты переписать на C# и сравнить с Node.JS? Если я не путаю, то думаю будет бомба :)
Прошу прощения за оффтоп, но меня аццки интересует следующий вопрос: возможно ли с использованием серверного javascript-а решить следующую программу: загрузить HTML страницу, в которой есть много жава скриптов. Чтобы они все выполнились, чтобы прошла эмуляция браузера.

Т.е. чтобы на линуксовом сервере без X-ов каким-нить серверным языком типа php и c использованием сервера жава скрипта можно было полностью эмулировать работу веб браузера?
Да можно, Node.JS + jsdom
Не яваскрипт, но все же отличное решение – htmlunit.sourceforge.net/

Удобно использовать если писать не на Java а на Groovy, вместе с code.google.com/p/hue/
Эх, JSDB на старой версии SpiderMonkey, которая еще в ff 3.5 используется. Новая, с JäegerMonkey, намного быстрее. Правда, не знаю, есть ли билды JSDB с ним, но в любом случае хорошо знать, что теперь всë заметно лучше. :)
Очень большую работу проделали. Спасибо, было интересно. Вы однозначно помогли сомневающимся людям в выборе JS движка.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории