🔥

Тред (RReverser)


Собственно для чего крут asm.js: Вычисления.

Вроде ничего не пропустил?)

Понятно, что в среднестатической аппликухе, которая позволяет постить и смотреть котиков, отправляя все запросы на бекенд, вычислений мало.

Но они необходимы во многих более сложных приложениях с разных сфер - e-commerce, работа с графикой, звуком, игры и так далее.

И если мы хотим, чтобы на JS можно было реализовывать все, что можно в нативщине, нам нужен способ делать эти вычисления быстро.

С этой целью и был придуман asm.js и на данный момент он оптимизируется всеми современными движками (извини, JavaScriptCore / Safari).

Идея была довольно простой: создать обратно-совместимое подмножество языка, и писать на нем модули со строго определенными типами.

Таким образом, в не поддерживаемых асм движках такой код будет все равно выполнятся (и даже довольно быстро за счет подсказок JIT).

А вот в новых движках получаем еще и крутой прирост за счет упрощенной компиляции и знания типов без "прогрева" JIT.

В общем идея крутая, и привела к возможности кросс-компайлинга кода из других языков -> LLVM -> asm.js с неплохим перфомансом.

Самый популярный юзкейс: вы компилируете C/C++ с помощью clang в LLVM, а его скармливаете emscripten, получая работающую быструю программу.

Конечно, код получается довольно монструозным из-за разного рантайма и прослоек, но зато легко портировать существующий код.

Думаю, все видели разные демки с тканями и т.д., поэтому вот что-то посерьезнее: чуваки портировали FFMpeg на JS. bgrins.github.io/videoconverter…

Получилось 7 МБ уже gzip-нутого JS-а, что немало, но блин, оно и правда конвертирует ваши видеофайлы прям в браузере! :)