Entry tags:
Dart VM и мушкетеры
Занялся тут изучением вариантов по переносу своего кодека в браузер. На 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
еще кстати есть https://github.com/PeyTy/LuaXe
no subject
(no subject)
no subject
(no subject)
(no subject)
no subject
no subject
Если речь идет о кодеке, то можно ли его хотя бы частично переложить на шейдеры? Звать их из свежих броузеров можно.
(no subject)
no subject
(no subject)
(no subject)
no subject
(haste, fay)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
до работы дойду - посмотрю, почему на VM так медленно.
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject