JavaScriptでもWebAssemblyが書けます

1955 ワード

探索方法
その名だけを聞き、実践したことのないWebAssembly.私の考えでは、先端開発の多くはスクリプト言語に精通しており、C、C++、rustなどの言語に精通していない.
では、jsでソースコードを書いてwebassemblyにコンパイルすればいい方法があります.そこで久しぶりにwaltというものを見つけました.
walt
waltはAssemblyScriptでコードを記述して自動的にコンパイルすることができ、AssemblyScriptはType Scriptのサブセットである.
構成方法リファレンス:github.com/ballercat/w…
ええ...この文章は少し書きにくいと思いますが、ソースコードを見なければならないかもしれません.
waltで何行かコードを書いて、ずっと間違いがあったようで、公式ドキュメントも豊富ではなく、どのように解決するか分からないので、他の方法を探求することにしました.
waltを放棄assemblyscriptを使用
また探ってみるとwaltを使わなくてもTypeScriptでWebAssemblyを書ける方法を見つけ、正面のurl:github.com/AssemblyScr…
大体の考え方は、ascツールを使用してassemblyscriptで作成したコードを.wasmファイルに生成し、new WebAssemblyを使用することです.Instance()とnew WebAssembly.Module()は、js読み取り可能なコードとしてロードします.最終的にjsで呼び出されます.
ロードを記録する.wasmでメソッドのコードを呼び出しましょう.
fetch('./module.optimized.wasm')
        .then(response => response.arrayBuffer())
        .then(function(result){
            console.log(result);
            let myModule = new WebAssembly.Instance(new WebAssembly.Module(result, {}));
            console.log(myModule.exports.add());
        });

すべてのソースアドレス
比較テスト
フィボナッチ試験n値を50に設定すると、生js時間:243727ミリ秒、WebAssembly時間:87325ミリ秒がかかります.パフォーマンスの違いが大きい.
時間がある時更にCとJAVAとその性能の対比をテストしなければなりません.
泣いて、同じ環境の下でJAVAが飛び出して40000ミリ秒余りしかかかりません.
言語
n値
時間がかかる(ms)
js
50
243727
WebAssembly
50
87325
JAVA
50
40000
C
-
-
今回のテストではWebAssemblyの演算速度はjsの約3倍で、JAVAの1/2と比較して性能が大幅に向上しました.
しかし、なぜJAVAより遅いのか、個人的には性能のボトルネックはWebAssemblyコンパイラにあると思います.
後でWebAssemblyのコンパイラをよく検討すべきです.
まだ分からないことがたくさんあります.例えば、公式サイトで言っているnative speedは、あるプログラミング言語を指していますか、それともマシンコードの速度を指していますか.
文章は更新され続け、ソースアドレスも更新されます.
参考資料:
  • www.ibm.com/developerwo…
  • AssemblyScriptプロジェクトホームページ