
Под катом будут результаты тестов год спустя, ссылка на Github, и новый(старый) способ использования движка JScript от IE9 вне самого IE9.
Движок из IE9.
За год IE9 успел официально выйти. Ранее я полагал, что после релиза новый движок JScript будет подменять в системе старый. Так было со всеми движками до этого. Однако, после установки официального IE9 обнаружил, что в директории С:\Windows\System32 присутствует две библиотеки — jscript.dll и jscript9.dll.
Windows Script Host после установки IE9 продолжает использовать старый движок версии 5.8. Старый трюк с подменой имени библиотеки в реестре не проходит. Одновременно библиотека jscript9.dll зарегистрирована с другим GUID в реестре. Я уже начал терять надежду на использование нового движка вне IE, но решение все же нашлось — необходимо просто зарегистрировать GUID jscript9.dll в качестве еще одного Scripting Engine для Windows Active Scripting. У меня это получилось при помощи следующего *.reg файла.
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\JavaScript9]
[HKEY_CLASSES_ROOT\JavaScript9\CLSID]
@="{16d51579-a30b-4c8b-a276-0ff4dc41e755}"
Теперь скрипты можно запускать на 9-й версии JScript из командной строки
cscript.exe //E:JavaScript9 script.js
Тестовый пакет
Пакет выложен на Github. Для запуска тестов, кроме самого пакета, понадобятся:
- NodeJS — можно скачать и установить, или скачать только EXE файл;
- JSDB — можно скачать с официального сайта архив, и распаковать куда-нибудь;
- Компилятор JScript.NET — установить соответствующую версию .NET Framework;
- Движок интерпретатора JScript — можно использовать тот, что уже есть в системе. Если же установлен IE9, то необходимо провести манипуляции, описанные в предыдущем разделе. Если хочется тестировать более старые версии… да кому это надо!?
Для запуска тестов используется набор простых CMD файлов. Сеанс тестирования запускается файлом
dotest.cmd
Для того чтобы включить в тестирование какой-либо движок, просто раскомментируйте соответствующую строчку в этом файле.
Каждый тест интерпретаторов запускается соответствующим файлом вида run.*.cmd, запуск тестов JScript.NET производится файлами comp.NET.*.cmd. Перед запуском тестов необходимо убедиться:
- что пути в нужных файлах run.*.cmd правильно указывают на исполняемые файлы движков (если они не прописаны в переменной окружения PATH)
- что пути в нужных файлах comp.NET.*.cmd указывают на установленные версии .NET Framework
Каждый прогон тестов создает новый HTML файл в подпапке results, который и представляет собой почти готовый для презентации результат теста.
Сами тесты размещаются в папке tests; туда можно добавлять свои тесты, не обязательно чтобы сравнить производительность разных движков. Например, можно еще рассмотреть разные решения одной задачи в пределах одного движка. Вот пример тестового файла:
!function(){
var str1 = 'Hello ',
str2 = 'world ',
str3 = 'test ',
i = 0;
tests.push({
name: 'String Concat',
func: function(){
i++;
return str1+str2+str3+' '+i;
},
reduce: function(r,x){ return r+x.length;},
start: 0,
loops: 100000
});
}();
Как видно, в массив tests нужно добавить объект с такими свойствами:
- name — имя теста;
- func — тестируемый код, который может возвращать некий результат, для проверки того, что код правильно работает на разных движках;
- reduce — функция для накопления результатов итераций теста;
- start — стартовое значение для reduce;
- loops — количество итераций теста.
Результат последнего теста







Опубликовать результаты оказалось проще в виде картинок. Если кому-то нужны табличные данные вот исходный файл.
Что интересно — в родных тестах новый V8 значительно быстрее старого, а в моих чуть медленнее.
Следует также отметить, что тесты эти ни в коем случае не отражают преимущества NodeJS в асинхронном вводе/выводе. Все тесты синхронные и мы тестируем просто разные версии движка V8. Для тестирования именно асинхронных преимуществ NodeJS нужно писать специальные тесты. Правда, в таком случае не понятно с чем еще его сравнивать в рамках этого пакета. Другие движки не предоставляют похожих возможностей event loop.
Ну и в конце, как обычно, ничего не значащий рейтинг:

Да «железо» в этом году другое и JScript 5.8 показал явно лучшие результаты. Впрочем, и сборка 5.8 немного другая.