Dart VM и мушкетеры
Nov. 9th, 2014 11:45 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Занялся тут изучением вариантов по переносу своего кодека в браузер. На Flash'e у меня уже был декодер, но это нынче не модно. Решил посмотреть разные другие способы, сравнив сперва их скорость на небольшой части кодека, наиболее времязанимающей, - декодировании ключевого кадра в RGB24. Там много массивов, циклов и простой целочисленной арифметики. Стали появляться первые результаты, порой довольно неожиданные. Dart VM, которую позиционируют как более продвинутую и быструю, оказалась втрое медленнее джаваскрипта (в Хроме), сгенеренного из того же самого дартовского исходника штатной утилитой dart2js. JS в Хроме лишь немного медленее чем Flash, и оба в пределах 2x от нативного кода на С++.
Время декодирования одной конкретной картинки 960х540:
На ноуте с Core i3:
Native C++ (старинный интеловский компилятор): 34 ms
Flash (compiled from Haxe): 58 ms
Dart на DartVM: 172 ms
JS, сгенеренный из Dart, в Chrome 37: 62 ms
Тот же JS в IE 11: 95 ms
На простеньком андроидном планшете:
Тот же JS в Chrome 34: 379 ms
Он же в дефолтном браузере там: 971 ms
На стареньком андроидном телефоне:
JS в дефолтном браузере: не взлетел
JS в Firefox: 976 ms
Flash: 472 ms
Тесты можно погонять тут:
JS (generated from Dart)
Flash (compiled from Haxe)
Dart (работает лишь в Dartium)
О размерах:
Flash распространяется скопилированным в байткод, .swf файл: 6 KБ
Dart, распространяется в исходнике: 9 КБ
Сгенеренный из него JS: 135 КБ при включенной минификации, более 300 КБ без оной.
Т.е. хвалебные рассказы про деревотрясение и оптимизацию... для небольших программ неактуальны, dart2js пихает туда довольно толстый рантайм. А еще каждое обращение к элементу массива в сгенеренном коде сопровождается ручной проверкой на выход за пределы с вызовом какой-то дартоспецифичной функции в случае ошибки. Я не знаю, насколько хорошо JS движки это оптимизируют, выглядит как куча ненужной работы.
Буду продолжать наблюдения. В планах еще как минимум генерация JS из Haxe и генерация ASM.js из С++. Писать на самом JS вы меня не заставите. :)
Время декодирования одной конкретной картинки 960х540:
На ноуте с Core i3:
Native C++ (старинный интеловский компилятор): 34 ms
Flash (compiled from Haxe): 58 ms
Dart на DartVM: 172 ms
JS, сгенеренный из Dart, в Chrome 37: 62 ms
Тот же JS в IE 11: 95 ms
На простеньком андроидном планшете:
Тот же JS в Chrome 34: 379 ms
Он же в дефолтном браузере там: 971 ms
На стареньком андроидном телефоне:
JS в дефолтном браузере: не взлетел
JS в Firefox: 976 ms
Flash: 472 ms
Тесты можно погонять тут:
JS (generated from Dart)
Flash (compiled from Haxe)
Dart (работает лишь в Dartium)
О размерах:
Flash распространяется скопилированным в байткод, .swf файл: 6 KБ
Dart, распространяется в исходнике: 9 КБ
Сгенеренный из него JS: 135 КБ при включенной минификации, более 300 КБ без оной.
Т.е. хвалебные рассказы про деревотрясение и оптимизацию... для небольших программ неактуальны, dart2js пихает туда довольно толстый рантайм. А еще каждое обращение к элементу массива в сгенеренном коде сопровождается ручной проверкой на выход за пределы с вызовом какой-то дартоспецифичной функции в случае ошибки. Я не знаю, насколько хорошо JS движки это оптимизируют, выглядит как куча ненужной работы.
Буду продолжать наблюдения. В планах еще как минимум генерация JS из Haxe и генерация ASM.js из С++. Писать на самом JS вы меня не заставите. :)
no subject
Date: 2014-11-10 01:00 pm (UTC)dart/dart-sdk/bin/dart.exe в том же SDK однако 64-битный.
> Кстати, какова официальная политика партии насчет расхождения семантики больших интов между Dart VM и dart2js?
Официальная политика партии соостоит в том, что это на данном этапе развития JS невозможно эффективно реализовать при трансляции в JS. Вот. Т.е. мы об этом знаем, нам хотелось бы это реализовать, но вот не получается. Спека написана таким образом, что размер int в ней не указывается и поэтому dart2js cтрого говоря соответствует спеке.
Вот такая, печальная на мой взгляд, история.
[1] http://blog.chromium.org/2014/08/64-bits-of-awesome-64-bit-windows_26.html