Вот я добавил обьектов и цикл на 10 миллионов итераций, примерно столько я хочу иметь в юишке за кадр.
javascript код:
function Cat(newAge) {
this.age = newAge
}
Cat.prototype.say = function () {
return this.age;
}
console.time('javascript time');
var q = 0
for (var i = 0; i < 10000000; ++i) {
var cat = new Cat(4)
q += cat.say()
if (q === 12) q = 0
}
console.timeEnd('javascript time');
console.log('javascript q=' + q);
его эквивалент на С++:
class Cat {
private:
int age;
public:
Cat(int newAge) {
age = newAge;
}
int say() {
return age;
}
};
int main() {
EM_ASM(console.time('asm time'));
int q = 0;
for (int i = 0; i < 10000000; ++i) {
Cat cat(4);
q += cat.say();
if (q == 12) q = 0;
}
EM_ASM(console.timeEnd('asm time'));
printf("asm: q=%d", q);
return 0;
}
То есть asm показывает минимальное проседание fps в 52 кадра в секунду
Яваскрипт же выдает 5.4 кадра в секунду
Иными словами чем сложнее данные и чем больше операций, тем выгодней asm js
Использовать его в юишке было отличной идеей. Осталось только как то выкинуть тучу лишнего кода который прикрепляется в выходному файлу, убрать всякую егалду для работы с файлами и прочие штуки для совместимости с сишными программами. Мне по сути очень не хочется в фреймворк тащить тучу лишнего кода увеличивая вес на 100кб.
То есть по сути мне просто нужно получить кучу и все, все внешние вызовы я буду делать через темплейт EM_ASM который код написаный внутри оставляет "как есть" и там я буду вызывать стандартные функции браузера.