6

この質問はこの古い質問に関連していますが、コードに大きな変更を加える前に、正しい答えがあることを確認したかったのです。

私は、アニメーションを描画するためにHTML5キャンバスの画像を絶えず更新する必要がある、非常に計算量の多いJavaScriptプログラムに取り組んでいます。今書いたように、コードはブラウザに制御を戻さずにアニメーションのすべてのフレームをタイトなループで描画します。つまり、最終的に表示されるのは最終フレームだけです。これを修正する唯一の方法は、アニメーションコードを、タイムアウトイベントを介して再入可能に呼び出すことができる小さな部分に分割することであると確信しています。これは正しいです?または、タイトなJavaScriptループの途中でも、キャンバスのコンテンツを特定の時点で強制的に表示する方法はありますか?

4

2 に答える 2

5

これを修正する唯一の方法は、アニメーションコードを、タイムアウトイベントを介して再入可能に呼び出すことができる小さな部分に分割することであると確信しています。これは正しいです?

これ正しいです。

Javascriptはシングルスレッドであるため、ロジックの実行中に他に何かが発生することはありません。唯一の選択肢は、ロジックをマイクロチャンクに分割してタイムアウト時に実行することにより、スレッドを「エミュレート」することです。

于 2011-05-16T07:52:54.193 に答える
4

利用可能な場合は、これにWebworkerを使用できます。Webworkersで実行する必要があるすべてを計算し、完了したら結果を投稿します。メッセージを投稿するときは、画像を更新するだけです。計算はバックグラウンドで実行され、画像の更新中はページがブロックされるだけです。

于 2011-05-16T08:35:10.627 に答える