Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JS版でのユーザー定義関数内wait/await #21

Open
zakki opened this issue May 6, 2021 · 2 comments
Open

JS版でのユーザー定義関数内wait/await #21

zakki opened this issue May 6, 2021 · 2 comments

Comments

@zakki
Copy link
Contributor

zakki commented May 6, 2021

現状はユーザー定義関数の実行が無限ループ内で行われるので動作が止まってしまいます。
具体的にはこういったコードで、ユーザー定義関数内で有効な操作があるまで画面更新を行わずawaitループを回すようなプログラムが動きません。
https://github.com/AmefuriTell/amayadori/blob/a5ff39165aac7b11b731e3dd37e5da49ecab1ab9/reversi/Reversi.hsp

解決案の一つとしてはasyncifyを使うと大きな変更なく上のようなプログラムも動くようになりました。
ただし、出力されるhsp3dish.jsのサイズが元の1.9Mから2.4MBに増えました。
これは、asyncifyを適用する関数をコンパイル時に指定すれば軽減できるそうです。
master...zakki:em-asyncify

他の対応として素直にはcode_callfunc()内で実行せずに親側で実行することも考えられますが、手を入れる必要のある個所が多そうです。

@onitama
Copy link
Owner

onitama commented May 10, 2021

ご提案ありがとうございます。参考にさせて頂きます。

@zakki
Copy link
Contributor Author

zakki commented Jul 20, 2022

Asyncify版を更新しました。

  1. メインループをAsyncify+emscripten_sleep()
    • ユーザー定義関数やイベント処理の挙動や実装がWindowsやLinuxに近くなる
    • requestAnimationFrame は使えなくなり独自にフレームレートの管理が必要
    • Asyncifyのオーバーヘッド分、hsp3dish.jsが大きくなる
  2. ファイル読み込み時にファイルがなければサーバーから同期的にファイル取得
    • 必要な分だけファイルをダウンロードされる
    • htmlやdataファイルの生成なしでもサーバーに必要なファイルを置くだけ
    • 個別ファイルを取得するのでhttpのリクエスト数が増える

全体的にWindows向けとWeb向けを共通で開発するにはメリットが多いと思いますが、Web特化だとデメリットもあります。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants