質問

私は構築してきました コンウェイの人生 ブラウザで実行するためにJavaScript / jQueryを使用して ここ. 。 Chrome、Firefox、OperaまたはSafariはこれをかなり速く行うので、これにはIEを使用しないでください。 IE9は大丈夫です。新しい世代の生活を生み出している間、私は歴史を歩むことができるように前世代を保存しています。これは、メモリがいっぱいになる特定のポイントまで正常に機能し、ブラウザ(タブ)がクラッシュするようになります。

だから私の質問は、メモリがいっぱいになっているときにどのように検出できるかということです。世代の歴史を形成する配列に各世代の配列を保存しています。これには、利用可能なメモリに応じて、数千世代後にブラウザをクラッシュさせる大量のメモリが必要です。 JavaScriptが利用可能なメモリの量をチェックできないが、方法がなければならないという事実を知っています...

役に立ちましたか?

解決

それを行う方法があるとは思わない。たとえあっても、おそらくブラウザ固有のものです。ただし、別の方法を提案できます。

各世代のすべてのデータを保存する代わりに、たまに撮影したスナップショットを保存します。コンウェイの人生のゲームは決定論的であるため、特定のスナップショットから将来のフレームを簡単に再生成できます。おそらく、数枚のフレームのバッファーを保持して、巻き戻しを素晴らしく滑らかにすることができます。

実際には、これは実際にはそうではありません 解決する 問題は、最終的にはスペースが足りなくなるためです。ただし、すべてを保存する場合 n フレーム、アプリケーションは長続きします n 長い時間が長く、それは十分に長いかもしれません。過去までどれだけ巻き戻すことができるかについて、いくつかの厳しい制限を課すことをお勧めします。それがあるフレームの数を決定します(30 fpsで10分= 18000 frames)。次に、分割します frames 保存できるフレームの数(さまざまなWebブラウザをプロファイルしてこれを把握する)、および使用するスナップショット間の間隔です。

他のヒント

Dogbertはほとんどそれを釘付けにしました。利用可能なメモリがどれだけあるかを正確に知ることはできませんが、データセットがどれほど大きくなるかを知ることができます。

したがって、配列に保存されている各オブジェクトのサイズを取得し、配列の寸法を掛けて、1回の反復のサイズです。それを必要な数の反復を掛けて、合計の合計の量を確認し、それに応じて調整します。

または、Travisに触発されて、最後に既知の配列からパターンを逆に実行するだけです。結局のところ、それは決定論的です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top