【GO】ver1.12でのWebAssembly


2019/02/25にGo1.12がリリースされてました。

https://golang.org/dl/

 

前回WebAssemblyビルドでメモリエラーになって困っていたので一応アップデートしてみました。

WebAssemblyはまだ実験的機能らしく関数や機能も変わっていたので試しつつメモ。

あと解決しなかったOOMエラーの考察。

 

Go1.12 wasm build

以前のファイルをコンパイルしてみるとエラーになりました。

Callback{}NewCallback()Func{}FuncOf()に変更になっています。

ドキュメントにコールバックないなぁと思っていたけどそういうことか。

 

とりあえずwasm_exec.js(GOのwasmを読み込むためのjavascript)が1.11から変更されているので変更します。

 

コードも新しい書き方に変えます。

jsでの呼び出しはそのままでthisが渡されるようになりました。

また返値を設定できるようになったため、js側で返値を得るための関数を用意しなくてよくなりました。

 

Out of memory考察

使いやすくなりましたがOut of Memoryエラーは変わりませんでした。

そもそもなんでそんなにメモリが使われるのか。

まずwasm_exec.jsのメモリを扱ってる部分で表示してみると10243B(1GB)のArrayBufferが作られていました。

 

1.12のソースだとこの辺で1024*16=16384ページ(1GB)確保しているようです。

ここを書き換えてビルドしたりも面倒そうなので、できたwasmのメモリ部分を書き換えるツールを使って半分にしてみます。

 

テストとして単純なwasmを作ります。

 

普通にコンパイルしたファイルと省メモリのものでテストします。

機種 CP-L45s P9 lite
メモリ(RAM) 2G
OS Andorid6.0 Android7.0
通常WASM実行 Out of memory 正常動作
半メモリWASM実行 実行されない 正常動作

 

もしかするとメモリと関係ない問題があるのかもしれない。

P9liteも使用可能メモリ1G未満の状態で動いてるし。

どちらにせよ動かない環境があるならまだ本格使用はしにくいなぁ。


コメントを残す

メールアドレスが公開されることはありません。