パフォーマンスの改善を 2 つだけ行いましたが、5 分後にクラッシュすることはありません (メモリ リークもしていないようです)。チェックアウトhttp://jsfiddle.net/3pbdQ/3/
- 各反復内のサイズを計算しないでください
- フリーズ間隔の代わりにタイムアウトを使用します。
- 数値のフロアリングにビット演算子を使用する
プロファイリングでは、異常なことは何も明らかになりません。
Chrome Profiler は WebWorkers では機能しません。ポール・アイリッシュとの会話によると:
「について確認してください:共有ワーカーを調べてください。また、ワーカーコード内で console.profile() を実行して(私は思う)、それらのビットをキャプチャすることもできます。「クリーンアップ」はガベージコレクターです。クリーンアップ後もまだ成長している場合余分なメモリの行、それはリークです。」
と
余談ですが、この例は、Math.random() が実際にはそれほどランダムではないことを示しています。
完全なランダム アルゴリズムがないことはよく知られていますが、表示されるグループ化された色の束は、canvas.height と canvas.width を設定していないためであり、CSS 値とは異なります。
編集: まだメモリがリークしていますが、理由はわかりません。約 10 秒後に「クリーンアップ」します。私の知識を超えていますが、60 FPS でスムーズに動作します ( var TIME = 16
)