Показать сообщение отдельно
  #2 (permalink)  
Старый 02.11.2015, 05:00
Профессор
Посмотреть профиль Найти все сообщения от Mаxmaxmаximus
 
Регистрация: 29.10.2015
Сообщений: 473

Вот я добавил обьектов и цикл на 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 который код написаный внутри оставляет "как есть" и там я буду вызывать стандартные функции браузера.

Последний раз редактировалось Mаxmaxmаximus, 02.11.2015 в 05:11.
Ответить с цитированием