Три и ASMjs

Недавно я начал делать некоторые исследования в ASM, и я играл с несколькими демонстрациями в Интернете. Я должен сказать, что демоверсия Unreal была довольно впечатляющей... Я разрабатываю приложение, использующее три в течение большого количества месяцев. Он прекрасно работает на быстрых машинах, но на нижних концах он имеет тенденцию бороться. Когда я запускал нереальную демонстрацию на своих нижних машинах, демо работало как сон. Мой вопрос: какое место может иметь ASM с тремя - может ли это значительно ускорить работу двигателя? Стоит ли исследовать или разрабатывать решение, которое использует оба варианта и переключаться между ними на основе браузера? Также были ли какие-либо планы для Трех, чтобы воспользоваться им в будущем?

Я пришел с фона С++ и был бы очень заинтересован в перспективах развития чего-то. Но в то же время это будет означать необходимость переучивания языка, и даже более проблематичным может быть большое количество времени, которое потребуется, чтобы получить его в полезной точке.

Каковы ваши мысли?

Ответ 1

Это мое мнение:

Прежде всего, asm.js на самом деле не предназначен для написания вручную. Хотя я говорю, что, безусловно, можно написать его, поскольку он имеет валидатор. Нереальная демо - это то, что было скомпилировано в asm.js с emscripten. Также не нужно взаимодействовать с другим кодом вне кода, который компилируется. Таким образом, он генерирует высоко оптимизированный код из-за того, что нереальное демо уже является высоко оптимизированным кодом на С++, оно оптимизируется компилятором и затем получает очередной запуск оптимизаций через asm.js.

Во-вторых, asm.js фактически поддерживается только firefox. Несмотря на то, что все другие браузеры могут выполнять его, но на большинстве он по-прежнему несет штраф за производительность. Это штраф, если вы сравниваете код asm.js, который делает то же самое, что и обычный код javascript. Просто выполните поиск jsperf.com.

Хорошо, это некоторые общие направляющие строки об asm.js. Теперь поговорим о Three.js.

Во-первых, потому что THREE.js должен взаимодействовать с пользовательским кодом, нелегко написать библиотеку asm.js из-за этого множество ограничений (без объектов).

Во-вторых, Three.js не принесет большой производительности в производительности для вычислений, где asm.js силен. Но он будет получать больше от будущих обновлений из браузеров. (например, создание typedarrays в хроме, которая теперь является точкой боли в THREE.js, скоро начнется. V8 issue)

В-третьих, код в asm.js должен управлять собственной памятью. Это означало бы, что THREE.js должен найти способ заставить большие приложения работать с ограниченной памятью. Или сделайте каждое приложение очень голодным.

В-четвертых, сравнение нереальной демонстрации с трио .js немного несправедливо из-за того, что three.js пытается разрешить всем писать 3D-приложения, в то время как нереальный движок является высоко оптимизированным движком для 3D-игр.

Как вы заметили, я в основном против asm.js в three.js. Но это потому, что слишком рано говорить, что лучший способ пойти. Существует высокая вероятность того, что asm.js получит место в три раза. В конечном итоге, но для более ограниченного использования в качестве рендеринга - только, например. Но на данный момент все еще слишком много нерешенных вопросов вокруг asm.js.

Но если вы хотите использовать asm.js и использовать С++, тогда я рекомендую emscripten, который использовался для создания нереальной демонстрации.

Это, конечно, мое мнение. Но я думаю, что это несколько отражает то, что имел в виду @Mr.doob и @WestLangley. И извините за длинный пост.

Ответ 2

Лучший способ узнать - написать небольшую демонстрацию в C (вручную), а затем скомпилировать ее в asm.js и запустить ее, а затем написать одну маленькую демоверсию в JS с помощью Three.js(вручную), затем запустить, и сравнить различия как в опыте разработчиков, так и в производительности.