我一直在用javascript / jquery构建Conway's Life以便在浏览器Here中运行它。 Chrome,Firefox和Opera或Safari可以很快完成此操作,因此最好不要使用IE。 IE9还可以。
在生成新一代生命的同时,我存储着前几代人,以便能够回顾历史。这可以正常工作,直到内存填满为止,这会使浏览器(选项卡)崩溃。
所以我的问题是:如何检测何时内存已满?我将每个世代的数组存储在形成世代历史的数组中。这会占用大量内存,在几千代之后,这可能会导致浏览器崩溃,具体取决于可用内存。
我知道javascript无法检查可用内存量的事实,但是必须有一种方法...
最佳答案
我怀疑是否有办法做到这一点。即使有,它也可能是特定于浏览器的。不过,我可以建议另一种方式。
而不是存储每一代的所有数据,而是存储偶尔拍摄的快照。由于Conway的“生命游戏”是确定性的,因此您可以轻松地从给定快照重新生成 future 的帧。您可能需要保留几帧的缓冲区,以便使倒带过程顺畅流畅。
实际上,这实际上并不能解决问题,因为最终会耗尽空间。但是,如果存储每个n
帧,则应用程序的n
持续时间会更长,这可能足够长。我建议您对可以倒退的时间强加一些硬性限制,以便对必须存储的数量设置上限。确定那将是多少帧(30 FPS时10分钟= 18000 frames
)。然后,将frames
除以可以存储的帧数(配置各种Web浏览器以解决此问题),这就是应该使用的快照间隔。