Собственно для чего крут 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-а, что немало, но блин, оно и правда конвертирует ваши видеофайлы прям в браузере! :)