Я нашел зависимость и точное объяснение скорости выполнения JavaScript.
1. Установил на VirtualBox чистые Win7 x32 и Win81 x32 из MSDN-образов, никаких апдейтов не делал. Версии по умолчанию IE8 для Win7 и IE11 для Win81. 2. Установил 1С 8.2, выполнил тесты конкатенации строк JavaScript в поле HTML на 10'000'000 витков: Win7 среднее 8960мс, Win81 среднее 9мс. 3. Установил на Win7 IE11, выполнил тест: среднее 9мс. 4. Вернул Win7 к первоначальному состоянию, установил IE10, выполнил тесты: среднее 1620мс.
Стало понятно что существует прямая зависимость от установленной версии IE, и кардинальное увеличение быстродействия дает лишь IE11. Дальше начинаю разбираться что и почему.
1. За работу JavaScript отвечает библиотека "system32\jscript.dll". До IE9 эта библиотека отвечала и за IE и за WSH. 2. Начиная с версии IE9 появилось 2 библиотеки: "system32\jscript.dll" продолжает отвечать за WSH, а "system32\jscript9.dll" начала отвечать за IE. 3. Вплоть до Win81 и IE11 в системе так и существуют 2 библиотеки JavaScript. Названия файлов не меняются, меняются лишь версии библиотек. Библиотека jscript.dll так и имеет всё те же мажорную и минорную версии 5.8, меняется лишь номер сборки. А вот библиотека jscript9.dll меняет мажорную и минорную версии одновременно с движком IE, и на данный момент в Win81 имеет версию 11.0.
Вообще на самом деле WSH использует язык JScript, а IE - JavaScript. Это разные языки хоть и похожие. То ли IE до IE9 тоже работал на JScript, то ли оба функционала были объединены в одну библиотеку. Начиная с IE9 разделили.
Печально что IE11 доступна лишь для Win7 и Win8 любых минорных версий любой разрядности, и еще для 64-разрядных версий WinServer2008R2 и WinServer2012R2. Можно правда поиграться с подменой классов в реестре и библиотек (например мне удалось прикрутить jscript9.dll от IE11 к IE10, в 1С она заработала а вот IE стал вылетать), но это уже довольно опасный для системы изврат. Может быть можно делать подмену библиотеки для сценариев JavaScript, выполняющихся только в 1С, различными хуками - но как это сделать мне неизвестно.
Приятно осознавать, что MS провела огромную работу над оптимизацией движка JavaScript для IE, ускорив его на 2 порядка. И когда-нибудь можно будет использовать высокопроизводительные скрипты в 1С без оглядки в прошлое.
Запуск такого же теста на FireFox26 дает результаты, сравнимые с IE10, и даже медленнее. Видимо в IE11 работает именно механизм компиляции кусков JavaScript в машинный код, что позволяет достичь быстродействия, сравнимого с программой на С++.
|