Pregunta

He estado construyendo La vida de Conway con JavaScript / jQuery para ejecutarlo en un navegador Aquí. Chrome, Firefox y Opera o Safari hacen esto bastante rápido, así que preferiblemente no use IE para esto. Sin embargo, IE9 está bien. Mientras generan las nuevas generaciones de la vida, estoy almacenando las generaciones anteriores para poder caminar de regreso a través de la historia. Esto funciona bien hasta cierto punto cuando la memoria se llena, lo que hace que el navegador (tabula) se bloquee.

Entonces mi pregunta es: ¿cómo puedo detectar cuando la memoria se está llenando? Estoy almacenando una matriz para cada generación en una matriz que forma la historia de las generaciones. Esto requiere grandes cantidades de memoria que bloquea el navegador después de unos pocos miles de generaciones, dependiendo de la memoria disponible. Soy consciente del hecho de que JavaScript no puede verificar la cantidad de memoria disponible, pero debe haber una manera ...

¿Fue útil?

Solución

Dudo que haya una manera de hacerlo. Incluso si lo hay, probablemente sería específico del navegador. Sin embargo, puedo sugerir una forma diferente.

En lugar de almacenar todos los datos para cada generación, almacene las instantáneas tomadas de vez en cuando. Dado que el juego de la vida de Conway es determinista, puedes reinterpretar fácilmente los marcos futuros de una instantánea dada. Probablemente querrás mantener un amortiguador de algunos cuadros para que puedas hacer que el rebobinado sea agradable y suave.

En realidad, esto en realidad no resolver El problema, ya que eventualmente se quedará sin espacio. Sin embargo, si almacena cada n marcos, su aplicación durará n veces más largo, lo que podría ser lo suficientemente largo. Le recomendaría que imponga algunos límites duros en qué tan lejos en el pasado puede rebobinar para que tenga un límite de cuánto tiene que almacenar. Determine cuántos marcos serían (10 minutos a 30 fps = 18000 frames). Entonces, divide frames Por cuántos marcos puede almacenar (perfile varios navegadores web para resolver esto) y ese es el intervalo entre las instantáneas que debe usar.

Otros consejos

Dogbert lo clavó. No puede saber exactamente cuánta memoria disponible hay, pero puede saber cuán potencialmente grande será su conjunto de datos.

Entonces, tome el tamaño de cada objeto almacenado en la matriz, multiplique por dimensiones de matriz y ese es el tamaño de una iteración. Multiplique eso por el número deseado de iteraciones para ver cuánto espacio se tomará en total y ajuste en consecuencia.

O, inspirado en Travis, simplemente ejecute el patrón en reversa desde la última matriz conocida. Es determinista después de todo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top