Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WASM

 WASM

WebAssebmly for beginners

Polina Gurtovaya

January 22, 2020
Tweet

More Decks by Polina Gurtovaya

Other Decks in Programming

Transcript

  1. 3

  2. И зачем тогда изобретать велосипед? 4 Потому что JS слишком

    долго парсить. Говорят что WASM в 20 раз быстрее Кое-что, связанное со скоростью, но об этом позже
  3. На самом деле все примерно так 7 "emcc -O3 -s

    WASM=1 -s ENVIRONMENT=\"web\" -s EXTRA_EXPORTED_RUNTIME_METHODS='[\"cwrap\"]' -s MODULARIZE=1 -s ‘EXPORT_NAME=\”blah-blah\"' -I src/wasm/ libwebp src/wasm/libwebp/src/ {dec,dsp,demux,enc,mux,utils}/*.c -I src/wasm/zlib src/ wasm/zlib/inf*.c src/wasm/zlib/ {zutil.c,adler32.c,crc32.c} -o src/wasm/encoders.js src/ wasm/encoders.c"
  4. У WASM есть спека (даже не одна) И там ни

    слова о web :) 15 A WebAssembly implementation will typically be embedded into a host environment. An embedder implements the connection between such a host environment and the WebAssembly semantics.
  5. Выглядит он вот так: 18 (module (func $i (import "imports"

    "logger") (param i32)) (memory (import "imports" "importedMemory") 1) (func (export "exportedFunc") i32.const 42 call $i) (func (export "add") (param i32 i32) (result i32) local.get 0 local.get 1 i32.add) (data (i32.const 0) "Fifty"))
  6. Как работает JS в браузере на примере V8 22 V8

    это движок, написаный на C++. Он используется с Chromium и NodeJS. V8 заставляет код работать. Раньше это был только JS код. Теперь это JS и WASM
  7. 23

  8. 25

  9. В общем: 26 Как быстро произойдет “interactive” предсказать сложно Скорость

    *не* определяется размером бандла (хотя это афектит) На мобилках все может быть в 5 раз медленнее
  10. 27

  11. Статус WASM: MVP 30 Пока лучше всего поддерживается компиляция из

    С/C++ Работает в V8 примерно с февраля 2017 LLVM based-projects Все достаточно “сыро”