Comments 30
NodeJS вне конкуренции
А вы не пробовали ради интереса увеличить количество итераций раз так в 100? Это вполне может отфильтровать сайд-эффекты от того же JIT'a, которые возможно имеют место быть.
Интересный результаты, наводят на позитив :-)
Не очень понятен смысл последних столбцов в таблицах.
И было бы неплохо сделать одинаковый масштаб для графиков XP и семёрки.
Не очень понятен смысл последних столбцов в таблицах.
И было бы неплохо сделать одинаковый масштаб для графиков XP и семёрки.
а это агрегированный результат, чтобы сразу видеть — если он отличается значит, что то не так
для V8 BS его нет, потому что там надо менять сами тесты
для V8 BS его нет, потому что там надо менять сами тесты
какой смысл в одинаковом масштабе?
сравнивать производительность разного железа?
сравнивать производительность разного железа?
да по хорошему надо делать еще один тест
исключить .Net, оставить только три движка
и делать хотя бы 3 прогона с увеличением количества итераций в 10 раз пошагово, чтобы посмотреть линейно ли меняется время.
и убрать 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.
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.
Немного не понятно:
В подсчете скорости время бралось вместе с созданием exe файла, или только время отработки самого exe файла? Если первое, то это не совсем честный тест. Я бы советывал сделать на C# exe файл, который бы уже запускал Jscript.Net код в памяти. Например, используя вот этот класс.
Вы правы. .Net оптимизирует программу, компилируя регулярные выражения при запуске. Это обходится прекомпиляцией регулярок… Но с прекомпиляцией был бы нечестный тест. Т.е. без прекомпиляции тест нечестен, т.к. заведомо проигрышен, с прекомпиляцией тест нечестен, т.к. время прекомпиляции в других движках учитывается.
Для компилятора все файлы скармливались jsc.exe из соответствующей версии .Net Framework и запускался результирующий exe файл.
В подсчете скорости время бралось вместе с созданием exe файла, или только время отработки самого exe файла? Если первое, то это не совсем честный тест. Я бы советывал сделать на C# exe файл, который бы уже запускал Jscript.Net код в памяти. Например, используя вот этот класс.
Похоже .Net как-то инициализирует регулярные выражения, которых в этом тесте в избытке, еще до выполнения кода.
Вы правы. .Net оптимизирует программу, компилируя регулярные выражения при запуске. Это обходится прекомпиляцией регулярок… Но с прекомпиляцией был бы нечестный тест. Т.е. без прекомпиляции тест нечестен, т.к. заведомо проигрышен, с прекомпиляцией тест нечестен, т.к. время прекомпиляции в других движках учитывается.
В подсчете скорости время бралось вместе с созданием exe файла, или только время отработки самого exe файла?
Ни то и ни другое.
Бралось время выполнения каждого теста. Вот код, который запускал тесты:
-
- function testresult(name, aloops, overall, average, overall_r, average_r, res){
- return {
- testname: name,
- overall_time: overall,
- loops: aloops,
- average_time: average,
- overall_wr_time: overall_r,
- average_wr_time: average_r,
- result: res
- };
- }
-
- function tester(name, func, reduce_func, start_val, loops){
- var r = start_val;
- var st = new Date();
- var l = loops;
- if(typeof loops == 'object'){
- if(SEtag in loops) l = loops[SEtag];
- else l = loops.def;
- }
- for(var i=0; i<l; i++) r = reduce_func(r,func());
- var ft = (new Date()).getTime() - st.getTime();
- var st = new Date();
- for(var i=0; i<l; i++) func();
- var ft1 = (new Date()).getTime() - st.getTime();
- return testresult(name,l,ft1,ft1/l,ft,ft/l, r);
- }
-
- function RunTests(res){
- for(var i in tests){
- res.push(tester(tests[i].name,
- tests[i].func,
- tests[i].reduce,
- tests[i].start,
- tests[i].loops));
- }
- }
-
-
Что касается регулярок, то все честно. Смотрите код V8 JS — RegExp — там первый цикл теста прокручивается вне теста.
Прошу прощения за оффтоп, но меня аццки интересует следующий вопрос: возможно ли с использованием серверного javascript-а решить следующую программу: загрузить HTML страницу, в которой есть много жава скриптов. Чтобы они все выполнились, чтобы прошла эмуляция браузера.
Т.е. чтобы на линуксовом сервере без X-ов каким-нить серверным языком типа php и c использованием сервера жава скрипта можно было полностью эмулировать работу веб браузера?
Т.е. чтобы на линуксовом сервере без X-ов каким-нить серверным языком типа php и c использованием сервера жава скрипта можно было полностью эмулировать работу веб браузера?
Да можно, Node.JS + jsdom
Не яваскрипт, но все же отличное решение – htmlunit.sourceforge.net/
Удобно использовать если писать не на Java а на Groovy, вместе с code.google.com/p/hue/
Удобно использовать если писать не на Java а на Groovy, вместе с code.google.com/p/hue/
Эх, JSDB на старой версии SpiderMonkey, которая еще в ff 3.5 используется. Новая, с JäegerMonkey, намного быстрее. Правда, не знаю, есть ли билды JSDB с ним, но в любом случае хорошо знать, что теперь всë заметно лучше. :)
Очень большую работу проделали. Спасибо, было интересно. Вы однозначно помогли сомневающимся людям в выборе JS движка.
Sign up to leave a comment.
Тест на скорость ServerSide