javascript - 如何防止javascript堆栈溢出?

标签 javascript jquery memory artificial-life

我一直在构建Conway's Life使用 javascript/jquery 以便在浏览器中运行它 Here 。 Chrome、Firefox 和 Opera 或 Safari 执行此操作的速度相当快,因此最好不要使用 IE。不过IE9还可以。 在生成新一代生命的同时,我存储了前几代生命,以便能够回顾历史。这工作正常,直到内存填满的某个点,这会导致浏览器(选项卡)崩溃。

所以我的问题是:如何检测内存何时填满?我将每一代的数组存储在一个数组中,该数组形成了各代的历史。这需要大量的内存,这会导致浏览器在几千代后崩溃,具体取决于可用内存。 我知道 JavaScript 无法检查可用内存量,但一定有办法......

最佳答案

我怀疑是否有办法做到这一点。即使有,它也可能是特定于浏览器的。不过,我可以建议一种不同的方式。

不要存储每一代的所有数据,而是存储每隔一段时间拍摄的快照。由于康威生命游戏是确定性的,因此您可以轻松地从给定的快照重新生成 future 的帧。您可能需要保留几帧的缓冲区,以便可以使倒带顺利流畅。

实际上,这并不能真正解决问题,因为您最终会耗尽空间。但是,如果您存储每 n 帧,您的应用程序的持续时间将延长 n 倍,这可能已经足够长了。我建议您对可以回溯到过去多远施加一些硬性限制,以便对必须存储的数量设置上限。确定该帧数(30 FPS 下 10 分钟 = 18000 )。然后,将除以您可以存储的帧数(分析各种网络浏览器以找出答案),这就是您应该使用的快照之间的间隔。

关于javascript - 如何防止javascript堆栈溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5346509/

相关文章:

javascript - ZeroClipboard - 检查是否未加载

javascript - 将 Javascript 函数转换为 jQuery 插件

javascript - 事件上的 JQuery 加载脚本(单击)

c - 32 位机器上的 Malloc 和大小

javascript - 文本框更新事件

jquery - photoswipe gallery – 最后一张图像和第一张图像之间的 X 图标

javascript - 如何更改jquery按钮图标

javascript - 仅当使用 jQuery 加载我的所有 JavaScript 时执行某些操作的最佳方式是什么?

memory - Mathematica NMinimize 遇到内存问题

node.js - 如何获取在 CloudFoundry 中运行的 Node-Express 应用程序使用的实例内存?