[WebAssembly]HTML5の「WebAssembly」を使用するとJavaScriptの実行速度をネイティブアプリのように高速にできます。Studioで中間言語(*.wasm)にコンパイルします。Studio]ブラウザでページが表示される時にJavaScriptの指示で中間言語を更にコンパイルして実行します。JavaScriptとはメモリの共有で連携が取れます。ちなみに私はWebAssemblyの事をインラインアセンブラのように「インラインC言語」と呼んでいます。最新技術なのでIE11は動作しませんがモダンなChrome/FireFox/Edgeなどは対応しています。WebAssemblyの使い方は後述します。どれくらい早いかを確認するMP3/OGG/AAC/FLAC/WAVなどの音声ファイルをWave形式に変換。音声形式の変換Waveファイルの各種操作。例として、JavaScriptのみで約4分のWaveファイル(34.8MB)を操作すると約2000msの処理時間でした。今回のWebAssemblyを使用すると処理時間が約130msへとなりました。約1/15ですので約15倍、速くなってます。※WebAssemblyの使い方によっては、もっと早くなる場合があります。WebAssemblyの使い方JavaScriptでWebAssemblyを利用するには中間言語(*.wasm)を作成できる開発環境が必要です。Project」を選択して「Create」を押します。基本的な操作は、各ファイルを編集したら右上にある「Save」でファイルを一つ一つ保存します。Run」でビルドと実行です。プロジェクトが完成したら「Download」します。「out¥main.wasm」が中間言語のファイルです。共有メモリのサンプルコード(C言語版)C言語側で「共有メモリ」を生成するサンプルです。src="./main.js"></script></body></html>main.c今回はrawがJavaScriptからも利用できる共有メモリとなります。raw[7];}JavaScriptから呼び出す関数の上には「WASM_EXPORT」を記述します。main.jsバッファと開始アドレスを指定してUint8Arrayを生成しています。何をやったかはC言語とJavaScriptのソースを見てください。配列サイズを増やすと中間言語(*.wasm)のサイズが肥大するので、昔ながらの4096単位でメモリアクセスすると良いと思います。その配列の実体は動的メモリ確保の「ヒープ領域」ではなく、グローバル変数を格納する「データ領域」で中間言語の中に確保されるようです。次章のJavaScript側で共有メモリを生成すると、ファイルサイズは肥大しません。C言語の共有メモリの方が速い気がします。共有メモリのサンプルコード(JavaScript版)JavaScript側で「共有メモリ」を生成するサンプルです。main.htmlC言語版と同じです。結果はC言語版と同様です。(WebAssembly使用)を見比べてみてください。前述のWAVE.wasm.jsのバージョンは「v1.01」でJavaScriptで共有メモリを生成しています。音声形式の変換で使用しているWAVE.wasm.jsは「v1.00」でC言語で共有メモリを生成しています。v1.00では4096単位でメモリを操作。v1.01では一気にメモリを操作しています。v1.00を使用しているかというと、そのWebアプリの処理ではv1.01より高速だからです。昔ながらの「4096単位のメモリアクセス」または「C言語で生成した共有メモリ」のどちらかが高速化に影響を与えていると思われます。補足JavaScript側の配列はInt8Array、Uint8Array、Uint8ClampedArray、Int16Array、Uint16Array、Int32Array、Uint32Array、Float32Array、Float64Arrayがあります。C言語側はそれらと同様な型を指定すればOKです。注意事項ローカルでは実行できません。サーバーにアップしてから実行します。fetch()でwasmファイルを読み込むとデフォルトではキャッシュに保存されます。wasmファイルを書き換えてテストする際にはキャッシュを毎回、削除するか「fetch("main.wasm",{cache:'no-cache'}).then...」のように「no-cache」の属性を付与して下さい。WebAssemblyの調査結果などC言語でmalloc()やfree()はどうやら使えないようです。objectとコンソールで怒られます。過去の情報ではmod._malloc()、mod.HEAP8.set()などで動的メモリを確保/設定できたようですが、現在はそのようなものはなさそうです。意外だったのが、浮動小数点同士の乗算はC言語よりJavaScriptの方が速いです。JavaScriptはファイルの読み込みは早いですが、書き込みが遅いようです。(3)このブログについてオープンソースGitHubで複数のオープンソースを公開。Webアプリこのブログのマスターが作成した無料ツールです。(オープンソース)ブラウザで8/16/24/32bitの相互変換。Webの逆アセンブラブラウザでEXE/DLLファイルを逆アセンブルする※その他にも「プチラボ」でアプリを多数公開しています。3Dゲームこのブログのマスターが作成した無料ゲームです。短時間で遊べるファンタジーのオンラインRPG風ほのぼの癒し系のスマホアプリ※その他は「@ゲーム」で公開しています。※インストール不要でそのまま遊べます。スマートフォンこのブログのマスターが作成した無料アプリです。お主の画像減色お手軽にカメラの写真や画像を「高品質に減色」するお主は誰だ。(女性向け)ロボットこのブログのマスターが作成したロボットです。