Pull to refresh

Comments 30

+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.
Быстрый взгляд на сайт не подсказал мне ни одного готового консольного решения для 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 использованием сервера жава скрипта можно было полностью эмулировать работу веб браузера?
Эх, JSDB на старой версии SpiderMonkey, которая еще в ff 3.5 используется. Новая, с JäegerMonkey, намного быстрее. Правда, не знаю, есть ли билды JSDB с ним, но в любом случае хорошо знать, что теперь всë заметно лучше. :)
Очень большую работу проделали. Спасибо, было интересно. Вы однозначно помогли сомневающимся людям в выборе JS движка.
Sign up to leave a comment.

Articles