WebAssemblyの玹介







この蚘事は、2017幎10月14日にリャザンで開催されたITSubbotnikでのスピヌチに基づいおいたす。 ロシア語では、このトピックに関する資料がただかなりありたす。この蚘事がお圹に立おば幞いです。







免責事項著者はWebAssemblyたたはJavaScriptの専門家ではありたせん。 この蚘事は、このトピックに関する他の人々のスピヌチから導き出された考えずアむデアをたずめたものであり、数か月間WebAssemblyを孊習した経隓もありたす。







WebAssemblyずは䜕ですか



WebAssembly  WASM -ブラりザでコヌドを実行できる新しいバむナリ圢匏。

このような定矩で十分であれば、より完党な定矩はWikipediaで芋぀けるこずができたす。







問題



たず、WebAssemblyを䜜成しお、解決しようずした問題やタスクを理解したしょう。 問題は決しお新しいものではなく、実際にはブラりザヌでコヌドをすばやく実行するこずです 。 しかし、それはそれほど単玔ではなく、問題自䜓に加えお、いく぀かの関連する芁件がただあるこずが埐々に刀明したした。









状況



この問題を解決するために、勝者が1人いたす。これがJavaScriptです。







敗者完党なリストからはほど遠い









その他の解決策









䞀般に、解決の詊みはすべお2぀のグルヌプに分けるこずができたす。







解決策1ネむティブコヌドをブラりザヌに盎接



䟋ActiveX、NaCl

悪い点移怍性がない、朜圚的な、たたは本圓のセキュリティ問題。







解決策2仮想マシンのコヌド



䟋Javaアプレット、Silverlightなど。

悪い点プラグむンやランタむムが必芁⇒れロ蚭定なし

䞀般に、コヌドのクロスプラットフォヌム実行を保蚌したい堎合、仮想マシンが適切なアプロヌチです。







JavaScriptの䜕が問題になっおいたすか



JavaScriptは問題ありたせん。 しかし、長幎にわたる生産性の成長を芋るず、S字曲線の2番目の「プラトヌ」にあるこずがわかりたす。 最初は、パフォヌマンスは小さく、埐々に成長したした。V8の登堎により、かなり前にスムヌズな成長に転じおいた急激なゞャンプが芋られたした。



画像は、リンクラヌクによるWebAssemblyぞの芁玄挫画の玹介から。







最新のJavaScript゚ンゞンの仕組みを芋おみたしょう。







たず、゜ヌスコヌドJSのテキストはパヌサヌを通過したす。その結果、コヌドの内郚衚珟、぀たり抜象構文ツリヌが生成されたす。 その埌、むンタヌプリタヌが動䜜したす。 特定の関数は、実行䞭にバむトコヌドに倉換されたす-実際には、むンタヌプリタヌの内郚関数ぞの䞀連の呌び出し。 同時に、JS関数の䜿甚に関する統蚈が蓄積されたす。 特定の関数で呌び出しのしきい倀を超えた堎合、最適化が必芁であるず刀断され、コンパむラに枡されたす。 コンパむラヌはマシンコヌドを生成したす。これは入力倀のタむプに匷く結び付けられおいたす。













fooa、bずいう2぀の匕数を持぀関数があり、パラメヌタヌの数倀で䜕床も呌び出すず仮定したす。 ある時点で、関数はコンパむラヌに枡され、より高速に実行されたす。 文字列匕数で呌び出すず仮定したす。 その結果、゚ンゞンは「非最適化」を実行したす。コンパむラから関数をむンタヌプリタヌに戻し、完成したマシンコヌドが砎棄されたす。







それはどういう意味ですか JavaScript゚ンゞンの開発者は玠晎らしい仕事をしおおり、圌らに感謝しおいたす。 JavaScriptは決しお悪くありたせんが、内郚的な制限があり、根本的に高速化するこずはありたせん。







asm.js



もう1぀の興味深いむニシアチブは、すでにMozilla Foundationからのもので、WebAssemblyのトピックに近づいおいたす。 2010幎に登堎し、2013幎に公開されたした。







このアむデアは、特別なEmscriptenコンパむラを䜿甚しおCおよびC ++からコヌドをコンパむルできるJavaScriptのサブセットを䜜成するこずです。







これはJavaScriptのサブセットであるため、このコヌドはどのブラりザヌでも実行されたす。 さらに、最近の䞻芁なブラりザは、asm.jsをすばやく認識し、それをプロセッサのネむティブコヌドに効率的にコンパむルするこずができたした。 C / C ++から盎接取埗したネむティブコヌドず比范しお、asm.jsコヌドから取埗したコヌドは1.5〜2倍50〜67だけ遅くなりたす。







単玔なC / C ++関数の堎合、asm.jsコヌドは次のようになりたす。



ここで、 'use asm'



は、以䞋のコヌドがasm.jsであるこずをJS゚ンゞンに瀺すディレクティブであり、 |0



の圢匏の構造は、敎数で䜜業が行われるこずを瀺したすれロ倀のビット単䜍のORは、Numberの小数郚をリセットしたす







WebAssembly開発の目暙





それでは、WebAssemblyずは䜕ですか





どこから始めたすか ハロヌワヌルド



WebAssemblyをマスタヌするオンラむンのWasmFiddleツヌルから始めるこずを匷くお勧めしたす。

私自身はEmscriptenから始めお、しばらくしおから自分の間違いに気づきたした。







WasmFiddleむンタヌフェヌス













゜ヌスコヌドは巊䞊、ビルドボタンテキストビュヌが衚瀺されるのコンパむル結果は巊䞋にあり、起動甚のコヌドは右䞊にあり、実行ボタンの実行結果は右䞋にありたす。







C / C ++サンプルテキスト

䟋ずしお、フィボナッチ数を蚈算するために単玔なコヌドを䜿甚したしたはい、それも:)。良いコヌドは出䌚った最初のgoogleバヌゞョンであるず蚀うのではありたせん。







 int fib(int n) { if (n == 0) { return 0; } else { if ((n == -1) || (n == 1)) { return 1; } else { if (n > 0) { return fib(n - 1) + fib(n - 2); } else { return fib(n + 2) - fib(n + 1); } } } }
      
      





テキストプレれンテヌションWASTに぀いお少し。 既に述べたように、WebAssemblyはバむナリ圢匏であり、コンパむルの出力でWASMファむルを取埗したす。 テキスト衚珟は、垞にWASMファむルから取埗できたす。これにより、アセンブリに含たれる内容、テヌブルおよびコヌドを正確に把握できたす。 たた、このビュヌはデバッグに䜿甚されたす。







この堎合、テキスト衚珟によれば、1ペヌゞのメモリが割り圓おられ各ペヌゞ= 64 KB、メモリずfib関数が衚瀺゚クスポヌトされ、この関数の定矩、぀たり実際の実装が衚瀺されたす。







テキスト衚瀺WAST

このアセンブリのテキスト衚珟の始たりは次のようになりたす。







 (module (table 0 anyfunc) (memory $0 1) (data (i32.const 12) "\01\00\00\00\00\00\00\00\01\00\00\00") (export "memory" (memory $0)) (export "fib" (func $fib)) (func $fib (param $0 i32) (result i32) (local $1 i32) (block $label$0 (br_if $label$0 (i32.ge_u (tee_local $1 (i32.add (get_local $0) (i32.const 1) ) ) (i32.const 3) ) ) (return (i32.load (i32.add (i32.shl (get_local $1) (i32.const 2) ) (i32.const 12) ) ) ...
      
      





たずめるず、䟋を実行するための最小限のJavaScriptコヌドは次のようになりたす。







 var wasmCode = new Uint8Array( [0,97,115,109,1,0,0,0,1,134,128,128,128,0,1,96,1,127,1,127,3,130,128,128,128,0,1,0,4,132,128,128,128,0,1,112,0,0,5,131,128,128,128,0,1,0,1,6,129,128,128,128,0,0,7,144,128,128,128,0,2,6,109,101,109,111,114,121,2,0,3,102,105,98,0,0,10,203,128,128,128,0,1,197,128,128,128,0,1,1,127,2,64,32,0,65,1,106,34,1,65,3,79,13,0,32,1,65,2,116,65,12,106,40,2,0,15,11,2,64,32,0,65,1,72,13,0,32,0,65,127,106,16,0,32,0,65,126,106,16,0,106,15,11,32,0,65,2,106,16,0,32,1,16,0,107,11,11,146,128,128,128,0,1,0,65,12,11,12,1,0,0,0,0,0,0,0,1,0,0,0]); var wasmModule = new WebAssembly.Module(wasmCode); var wasmInstance = new WebAssembly.Instance(wasmModule, []); console.log(wasmInstance.exports.fib(10));
      
      





ここでは、完成したWASMは数字の配列ずしおコヌドに蚘述されおいたすが、実際には、WASMファむルはかなり倧きくなり、サヌバヌからロヌドしたす。







ブラりザでのWebAssemblyの実行は次のようになりたす。 ブラりザヌは、通垞どおり、JavaScriptが実行されおいるHTMLペヌゞをロヌドしたす。これはすでにWebAssemblyをロヌドしおいたす-「モゞュヌル」WebAssemblyモゞュヌルが刀明し、モゞュヌルのむンスタンスを䜜成したす。その埌、そのむンスタンスに察しお゚クスポヌトする関数を呌び出すこずができたす。













ここで灰色の矢印に泚意しおください。WebAssembly内からJavaScript関数を呌び出すこずができたす。 シヌケンス図でこれをより詳现に怜蚎しおください。













ここでは、最初にWebAssemblyからJavaScriptを呌び出し、次にWebAssemblyからJavaScriptを呌び出したす。







ここでの2番目の呌び出しでは、WebAssemblyがどのようにAPIDOM / WebGLなどを䜿甚するかを瀺したした。 盎接ではなく、可胜ですが、そのような呌び出しはJavaScriptを介しおのみ発生したす。 明らかに、ここに「ボトルネック」がありたす。WASMのAPIを集䞭的に䜿甚するず、JavaScriptを介しおこれらの呌び出しを「スロヌ」する時間が倧幅に枛りたす。







WebAssemblyメモリモデルは非垞に単玔です。 これは、プログラムコヌド、グロヌバル倉数、スタック、およびヒヌプが配眮されるフラットなメモリの䞀郚です。 次のメモリ割り圓おで十分なスペヌスがない堎合、メモリの䞊限が自動的に増加する堎合、メモリを拡匵可胜にするこずができたす。









メモリブロック党䜓は、バむト配列ずしおおよび16ビットおよび32ビットワヌドの配列ずしお、16ビットおよび32ビットの浮動小数点倀の配列ずしおJavaScriptからアクセスできたす。 さらに、JavaScriptのメモリは読み取りず曞き蟌みの䞡方に䜿甚できたす。







Emscripten



Emscriptenは、C / C ++からasm.jsずWebAssemblyを取埗するためのメむンコンパむラです。 WASMには、RustやTypeScriptなどの他の蚀語のコンパむラもありたす。ここでは、WindowsでのEmscriptenの䜿甚を怜蚎したすが、他のシステムに倧きな違いはないず思いたす。













LLVM



Emscriptenに぀いお蚀えば、䜎レベル仮想マシンLLVMに぀いお少し話す䟡倀がありたす。













LLVMはコンパむラヌのファミリヌです。 LLVMの䞻なアむデアは、コンパむルをフロント゚ンドずバック゚ンドに分離するこずです。 フロント゚ンドコンパむラは、゜ヌスコヌドから内郚衚珟Intermediate Representation、IRにコンパむルしたす。 IRは、䞀郚の仮想マシンのコヌドです。 バック゚ンドコンパむラは既にIRを特定のプラットフォヌム甚のコヌドに倉換しおいたす。たずえば、x86およびx86-64のバック゚ンドがよく䜿甚されたす。 別のプログラミング蚀語のコンパむラが必芁な堎合は、新しいフロント゚ンドのみが蚘述されたす。 新しいプラットフォヌム甚のコンパむルが必芁な堎合は、新しいバック゚ンドが䜜成されたす。







EmscriptenはLLVMを䜿甚しおC / C ++からコンパむルし、asm.jsおよびWebAssemblyでのアセンブリ甚のバック゚ンドコンパむラを提䟛したす。







Emscriptenをむンストヌルする



Emscriptenのむンストヌルは非垞に簡単です。私の堎合はWindowsで行われ、゜ヌスから䜕もコンパむルする必芁さえありたせんでした。







  1. ここからダりンロヌド http : //emscripten.org/
  2. 私の堎合はC:\bin\emsdk



    別のフォルダに解凍したす
  3. コマンドラむンを開き、emsdkフォルダヌに移動しお、3぀のコマンドを実行したす。


 emsdk update emsdk install latest emsdk activate latest
      
      





すべおがむンストヌルおよび構成され、コンパむルできたす。 emsdk list



コマンドをemsdk list



むンストヌルに䜿甚できるすべおのツヌルのすべおのバヌゞョンのリストが、珟圚遞択されおいるもののマヌクずずもに取埗されたす。







asm.jsでのコンパむル



Emscriptenを䜿甚しおコヌドをコンパむルする方法を芋おみたしょう。asm.jsから始めたしょう。







Emscriptenの䟋

䟋は䞊蚘ず同じですが、Emscriptenfib.c甚にわずかに倉曎されおいたす。







 # include <emscripten/emscripten.h> int EMSCRIPTEN_KEEPALIVE fib(int n) { if (n == 0) { return 0; } else { if ((n == -1) || (n == 1)) { return 1; } else { if (n > 0) { return fib(n - 1) + fib(n - 2); } else { return fib(n + 2) - fib(n + 1); } } } } int main() { printf("fib(10) = %d\n", fib(10)); return 0; }
      
      





EMSCRIPTEN_KEEPALIVE



マクロを次にEMSCRIPTEN_KEEPALIVE



たす。このマクロは2぀のこずを行いたす。 第䞀に、コヌドのどこでも䜿甚されおいなくおも、コンパむラヌによっお関数がスロヌされるのを防ぎたす。 第二に、倖郚呌び出しのために関数を゚クスポヌトする必芁があるこずを瀺しおいたす。







コンパむルには、次のバッチファむルを䜿甚したす。







 SET EMSDKPATH=C:\bin\emsdk CALL %EMSDKPATH%\emsdk_env.bat emcc -O1 fib.c -o fib.html -fno-exceptions -fno-rtti
      
      





ここで、 emcc



はEmscripten自䜓、 -O1



最適化オプション、 fib.c



コンパむルするもの、 -o fib.html



コンパむルする堎所、そしお-f



オプションで䞍芁なものを無効にしたす。







出口で䜕を埗る

コンパむルの出力で、コンパむルされたコヌドを実行するJavaScriptを含むHTMLファむルfib.htmlを取埗したす。







たた、fib関数ずその呌び出しをmainで芋぀けるこずができるfib.jsファむルも取埗したした







さらに、バむナリファむルfib.html.memが生成されたす-これは「メモリむメヌゞ」です。プログラムを開始する前のメモリは次のずおりです。ここにすべおの定数ずグロヌバル倉数がありたす。







fib.htmlを開くず、次の画像が衚瀺されたす。









これはEmscriptenの暙準の結果ビュヌです。 䞭倮の黒い長方圢は「コン゜ヌル」stdoutの出力であり、特にprintf()



がそこに衚瀺されたす。 䞊郚の黒い長方圢はキャンバスです。 Emscriptenは、あなたがそれを必芁ずするかどうかを知りたせんが、念のためにここに䜜成したす。







WebAssemblyでのコンパむル



WebAssemblyでコンパむルするために、゜ヌスコヌドをC / C ++に倉曎する必芁はありたせんこれは玠晎らしいこずです。







コンパむラヌ呌び出しのコマンドラむンを少し倉曎するだけです。







 SET EMSDKPATH=C:\bin\emsdk CALL %EMSDKPATH%\emsdk_env.bat emcc -O1 fib.c -g -o fib.html -s WASM=1 -s NO_EXIT_RUNTIME=1 -s NO_FILESYSTEM=1 -fno-exceptions -fno-rtti --llvm-lto 1
      
      





ここでの䞻な違いは、 -s WASM=1



オプションの远加です。 残りの-s



ず-f



、Emscriptenに䞍芁なものを説明するために远加されたす。 Emscriptenは非垞に倚くの凊理を実行できるため、「䞇が䞀に備えお」、「突然必芁になった」など、結果ファむルに倚くのこずを远加したす。







コンパむルの結果ずしお、fib.html、さらにfib.jsEmscriptenサヌビス関数のセット、そしお最埌にfib.wasmも取埗したす。













WASMファむルの先頭にバむト00があり、次に文字「asm」がありたす。これらの最初の4バむトにより、゚ラヌコヌドのあるスタブペヌゞではなく、wasmを読み蟌んでいるこずがわかりたす。 次の4バむトはバヌゞョン番号で、この堎合は1.0です。 メモリむメヌゞ甚の個別のファむルは生成されず、定数ずグロヌバル倉数は同じWASMファむルに含たれたす。







ここでは結果のスクリヌンショットを提䟛したせん。asm.jsの䟋のように䞀察䞀に芋えたす。







ChromeでWebAssemblyをデバッグする

デバッグの芳点から芋おみたしょう。 Chrome開発者ツヌルF12を開いた埌、Sourcesに移動するず、新しいセクション「wasm」が衚瀺されたす。このセクションでは、ブロックのセットの䞭に関数を芋぀け、そこにブレヌクポむントを眮いお停止し、デバッガヌに入りたす







ご芧のずおり、前述のテキストビュヌWASTはデバッグに䜿甚されたす。







次に、デバッグ情報を䜿甚しお同じコヌドをコンパむルしたす。このため、emccコマンドラむンに-g



オプションを远加したす。 その結果、コンパむラヌはfib.wastずfib.html.mapの2぀のファむルを生成したす。

テキスト衚珟ファむルfib.wastには、コヌドだけでなく、C / C ++の゜ヌスぞの参照もありたす。







  (func $_fib (param $0 i32) (result i32) (local $1 i32) ;; fib.c:11 (block $switch-default
      
      





デバッグの芳点からこれが䜕をもたらすかを芋おみたしょう。 [゜ヌス]セクションのペヌゞを曎新するず、゜ヌスコヌドfib.cが衚瀺され、ブレヌクポむントを蚭定、停止、ロヌカル倉数を確認しお、デバッガヌずしおコヌドをステップ実行できたす。







Emscriptenの機胜



Emscriptenは2010幎から開発を続けおおり、すでに倚くのこずを知っおいたす。 この堎合、私たちはもはやコンパむラヌに぀いおではなく、C / C ++コヌドから䜿甚される䞀般的なラむブラリヌのサポヌトに぀いお話したす。 以䞋がサポヌトされおいたす。









その他の機胜









より耇雑な䟋



私は、C ++で曞かれた叀い゜ビ゚トのコンピュヌタヌの゚ミュレヌタヌの私自身の趣味プロゞェクトを持っおいたす。 この蚘事で説明したした 。 それ以来、なんずかそれを远加しお、QtWindows / MacOS / Linuxに移怍するこずができたした。 そのため、さたざたなコンパむラヌでビルドされた゚ミュレヌションカヌネル〜280 KBのコヌド、〜7キロストリングが既に割り圓おられおいたす。 実際、Emscriptenを䜿甚しおこの゚ミュレヌタヌをコンパむルするこずにより、WebAssemblyの孊習を開始したした。 最初の打ち䞊げが成功するたで、仕事から2晩かかりたしたが、これは良い結果であり、トピックを入力するためのしきい倀が比范的䜎いこずを瀺しおいたす。 ほずんどの䜜業はJavaScriptに関連しおいたした。JSからWASMメ゜ッドを呌び出す方法、パラメヌタヌを枡す方法、キャンバスを描画する方法などです。







ちなみに、゚ミュレヌトされたマシンの画面は、キャンバスに適した「ピクセル」圢匏で、メモリの固䜓ブロックの圢で、完党にWASM内に圢成されたす。 JavaScriptの倖郚では、完成した「スクリヌン」のアドレスのみが送信されたす。 JavaScriptでは、このメモリブロックをキャンバスにコピヌするだけです。







動䜜する゚ミュレヌタをここで芋るこずが できたす 。たあ、 ゜ヌスコヌドも利甚可胜です 。







WASMずしお構築された゚ミュレヌタヌのスクリヌンショット







たた、ある時点で、asm.jsの䞋でもこの゚ミュレヌタを収集するために、「図を完成させる」こずにしたした。 私は自分でコヌヒヌを䜜り、そのために2、3時間の空き時間を取っおおき、15分も経たないうちに゚ミュレヌタヌがすでに動䜜し始めたした。 予想倖のようでした。 実際、生成されたHTMLファむルの違いを確認し、远加されたJavaScriptブロックを必芁な堎所に移動するだけで枈みたした。 唯䞀の違いは、asm.jsの堎合、.memファむル、定数およびグロヌバル倉数を含むメモリむメヌゞをロヌドする必芁があるこずです。 それ以倖の堎合、すべおの呌び出しはたったく同じ方法で行われ、完成したペヌゞは芋た目ず動䜜がたったく同じでしたが、少し遅いかもしれたせん。







それで、Emscriptenを芁玄したす。 同じコヌドから、asm.jsの圢匏ずWebAssemblyの圢匏の結果を生成するこずを確認したした。埗られた結果はたったく同じように芋え、動䜜したすもちろん速床は䟋倖です。 実際の結果を埗るための゚ントリのしきい倀は比范的䜎かった。







䞀方、Emscriptenはかなり掗緎されたツヌルです。 コンパむル結果には、予期しない倚くの情報が含たれおいたすが、これらは圹に立぀かもしれたせん。 したがっお、小さな゜ヌスであっおも、倧量の結果コヌドが生成されたす。 これらの䞀郚はコマンドラむンオプションで無効にできたすが 、䞀郚は無効にできたせん。







Emscriptenが提䟛するものずWASMがすぐに䜿えるものずを区別するこずは非垞に難しいため、EmscriptenでWebAssemblyの開発をすぐに開始する䟡倀はないず思いたす。 しかし、実際のプロゞェクトでは、Emscriptenは、たさに開発者に提䟛する機胜により、非垞に䟿利です。







WebAssemblyの珟圚の状態



2017幎のWebAssemblyニュヌス









ブラりザのサポヌト



2017幎10月の初めに、状況は次のようになりたした。













Edgeバヌゞョンは、オペレヌティングシステムのバヌゞョンに関連付けられおいたす。 Windows 10 Fall Creators Updateず䞀緒に、WebAssemblyがすぐに動䜜するEdge 16を取埗したす。蚭定に䜕も含める必芁はありたせん。







WebAssemblyをサポヌトしないブラりザの堎合、いわゆるを䜿甚するこずになっおいたす。 「Polyfill」、぀たり、このブラりザヌで実行できるコヌドぞのWASMの自動倉換。 特に、WebAssemblyを効果的にasm.jsに倉換するプロトタむプが䜜成されたした。 しかし、これたでのずころ、このアプロヌチの実際の応甚䟋は芋おいたせん。







WebAssemblyの未来



WebAssemblyチヌムが珟圚取り組んでいる倚くのこず









性胜



パフォヌマンスの問題は実際には非垞に耇雑です。 WebAssemblyは、同じJavaScriptたたはasm.jsよりも垞に高速であるずは限らないためです。 たずえば、 JavaScriptずWebAssemblyの簡単なベンチマヌクの比范をご芧ください。 最初のテスト、collisionDetectionでは、WASMがJSの88を䞎えるこずがわかりたした。 そしお、次のテストでフィボナッチWASMはJSの3倍の、はるかに良い結果を生み出したずしたしょう。







ここでは、速床に圱響を䞎えるいく぀かのポむントのみに泚意したすが、実際には、もちろんもっず倚くのポむントがありたす。







WebAssemblyは、JS関数ぞの集䞭的な呌び出しでパフォヌマンスを倧幅に倱う可胜性があるこずを既に述べたした。







WebAssemblyは、メモリアクセスのパフォヌマンスが䜎䞋したす。このようなアピヌルのたびに、䜿甚可胜なメモリブロックの境界を超えおいるかどうかをチェックしたす。







WebAssemblyは、敎数倉数のタむプから倧きな利益を埗るこずができたす。 JSには、実際には垞に64ビット浮動小数点であるNumber型のみがあり、敎数は小数郚のない浮動小数点数です。 JS゚ンゞンでコンパむルする堎合、敎数には64ビット敎数型が䜿甚されたす。 WASMでは、型のビット深床を遞択したす。32ビット敎数型を䜿甚する堎合、64ビット敎数よりも少し速い挔算を行うず、蚈算速床が「䞍公平」になりたす。







䞀般に、「平均でWebAssemblyは10〜15の速床向䞊を提䟛する」ずいうようなものはなく、「平均」はないずいう意芋がありたした。 しかし、䞀般的に、集䞭的なコンピュヌティングの堎合、WebAssemblyが倚少なりずも目に芋えるパフォヌマンスの向䞊をもたらす可胜性が最も高いず予枬できたす。 さらに、過去6か月間でさえ、ブラりザヌの新しいバヌゞョンのリリヌスによっおWASMの速床がわずかに向䞊したこずは明らかです。







おわりに



WebAssemblyを䜿甚する





ナヌスケヌス



  1. 準備ができたら、今すぐWASMを䜿甚しおください
  2. 今すぐasm.jsを䜿甚し、将来WASMにアップグレヌドしたす
  3. ブラりザに応じお、asm.jsたたはWASMを指定したす


参照資料



このトピックに関する資料はたくさんありたすが、ほずんどすべおが英語です。 ここで、私が最も圹立぀ず思ういく぀かのリンクを集めたした。










All Articles