Javascript.RU

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

ASM.JS невероятен







Ну че пасоны, кто игрался, кто что думает? п.с. (Я вот буду на нем юиху писать теперь), там есть и работа с дом и виртуальная файловая система,и удобно шейдеры писать, и на канве рисовать, и можно в бинарник для node.js скомпилировать и.т.п.

А вы что думаете? Научить вас его запускать писать и компилить? Али сами)?

Последний раз редактировалось Mаxmaxmаximus, 02.11.2015 в 03:19.
Ответить с цитированием
  #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.
Ответить с цитированием
  #3 (permalink)  
Старый 02.11.2015, 05:24
Профессор
Посмотреть профиль Найти все сообщения от Mаxmaxmаximus
 
Регистрация: 29.10.2015
Сообщений: 473

Цитата:
А тебе нафига быстрей?
Я пишу двигло для рендера. Использующее виртуал дом (виртуальные дом элементы) как в Реакт от фейсбука. Я работаю с виртуальным DOM деревом а оно, когда ему нужно, подрендеривает это в реальный браузерный дом, физически отображая элементы на экране. Иными словами я хочу список в миллион элементов нарисовать на экране. Но браузер зависнет уже при 10к. ПО этому я нарисую его в виртуальный дом, а тот отследит где щас камера по отношеню к сайту и какие элементы должны быть видны а какие нет, и нарисует из того миллиона только те, что на экране могут быть видны. А когда чел прокрутит камеру вниз, то фреймворк поймет это ибыстренько подрисует элементы снизу, а те что сверху скрылись за экраном удалит). таким образом чел может рисовать огроменное количество кнопок и элементов, а движок рендера будет рисовать только то что видно на экране.

Для этого нужно будет построить не только виртуал дом, но и виртуал стайлшит, но фреймворк предполагает что мы не будем добавлять новые css стили после инициализации приложения, но если добавим ни что не мешает вызвать что-то типа ui.update() и пересчитать виртуальный стайлшит.


Вообще, теоретически, имея такие мощности, можно написать браузер в браузере, и оптимизировать не оптимальные места в браузере заточив под нужды фреймворка. Например я уже парсю стайлшиты определяю приоритеты селекторов и определяю какие изменения добавляет тот или иной класс чтобы анимировано изменить width с auto на допустим 30em, если задан transition widtn. Хотя браузер это делает рывком. и.т.п.

Я могу расширить эту концепцию и добавить нууу, например можно будет не писать префиксы всякие в css, фреймворк их сам добавит. Или можно будет написать что-то вроде новых кастомных css свойств, ну как то что делают препроцессоры, тока тут будет какое нить свойство типа width: @parent - 10% и фреймворк начнет автоматически в виртуал дом брать ширину в 10% от родительской высчитывать. Или можно добавить новые единицы измерения например, типа "одна сотая ширины экрана". Но я пока не знаю можно ли получать доступ к сырым данным css файлов? Кто знает? Я имею ввиду если стайл уже загружен и я хочу посмотреть тупо его КОД. Как это сделать? Просто стайлшиты котрые генерит браузер, при парсинге игнорируют неизвестные им свойства и синтаксические ошибки. По этому мне нужны сырые стили. Чтобы не делать xhr запрашивая и парся их повторно.

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

Увеличел количество итераций с обьектами в 10 раз

результаты поражают:
Ответить с цитированием
  #5 (permalink)  
Старый 02.11.2015, 08:39
Профессор
Посмотреть профиль Найти все сообщения от Mаxmaxmаximus
 
Регистрация: 29.10.2015
Сообщений: 473

Еще есть вот такая штука http://www.leaningtech.com/cheerp/, она генерирует не asm.js код а просто код на бинарных операторах. В отличии от emscripten она позволяет из С++ работать напрямую со всем браузерным api включая дом и прочее, даже позволяет фреймворки юзать типа jQuery. НО она работает где то на 20% медленнее asm, а где то млять БЫСТРЕЕ!! Чертовщина) и оверхед у неё аж 600 килобайт!!!! а у асма 140


вот сравнение производительности на миллионе элементов:



Кстати помнится мне кто-то тут кукарекал что бинарные операторы работают не быстрее чем обычные и типа все это миф)??? лалки
Ответить с цитированием
  #6 (permalink)  
Старый 02.11.2015, 09:56
Профессор
Посмотреть профиль Найти все сообщения от Mаxmaxmаximus
 
Регистрация: 29.10.2015
Сообщений: 473

Ну, короче че я думаю, я думаю я буду писать классы обертки для взаимодействия с DOM в браузере для Emscripten.
Так как он все таки быстрее и кода меньше генерит. А потом предложу внедрить их в стандартную библиотеку Emscripten, я ж крутой

Последний раз редактировалось Mаxmaxmаximus, 02.11.2015 в 18:19.
Ответить с цитированием
  #7 (permalink)  
Старый 03.11.2015, 02:47
Профессор
Посмотреть профиль Найти все сообщения от Mаxmaxmаximus
 
Регистрация: 29.10.2015
Сообщений: 473

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

оказуца взаимодействовать с рантайм окружением проще простого

#include <emscripten.h>
#include <emscripten/val.h>

using namespace emscripten;


int main() {

    val document = val::global("document");
    val body = document["body"];
    body.set("innerHTML", val("ololo"));
    body.call<void>("setAttribute", val("name"), val("i winner"));
}


Ответить с цитированием
  #9 (permalink)  
Старый 03.11.2015, 14:41
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Mаxmaxmаximus, тема интересная. Взял бы свою энергию направил на бы созидание, а точнее, написал бы туториал. Сейчас, я не понимаю, для кого ты всё это пишешь.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #10 (permalink)  
Старый 03.11.2015, 17:05
Профессор
Посмотреть профиль Найти все сообщения от Mаxmaxmаximus
 
Регистрация: 29.10.2015
Сообщений: 473

Сообщение от FINoM
написал бы туториал
ща
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ASM.JS. манипуляция c DOM. Tsamsiyu Общие вопросы Javascript 0 10.11.2014 15:05
ASM.JS. Источники знаний. Tsamsiyu Общие вопросы Javascript 35 08.11.2014 18:53
Chrome + opera +firefox поддерживают ASM.JS DjDiablo Оффтопик 1 13.12.2013 10:14