Попробовал написать рекурсивный фибоначи на чистом asm.js:
(function(std, env, heap) {
'use asm';
function fib(n) {
n = n|0;
if((n|0) < (2|0)) {
return 1|0;
}
return (fib((n|0) - (1|0)) + fib((n|0) - (2|0)))|0;
}
return fib;
}(
{},
null,
new ArrayBuffer(0)
));
Действительно медленнее чем на js
Причина очевидна: asm.js не оптимизируется никак, это готовые инструкции для виртуальной машины (например v8)
Обычный js перед компиляцией прогоняется через оптимизатор, который успешно преобразует хвостовые рекурсии в цикл
Делаем вывод, emscripten пока не умеет оптимизировать хвостовые рекурсии
И кстати какую опцию оптимизации вы отдавали в em++ ?
P.S. насчет производительности, у меня хэширующий алгоритм (crc64 с солью) после полного переписывания с js на asm.js дал прирост производительности в 21.7 раз (node 6.3.1 v8 5.0.71.57)