Question

J'ai construit la vie de Conway avec javascript / jquery afin de l'exécuter dans un navigateur . Chrome, Firefox et Opera ou Safari font assez rapidement de façon préférable de ne pas utiliser IE pour cela. IE9 est ok bien. Alors que la génération des nouvelles générations de vie je stocke les générations précédentes afin de pouvoir marcher à travers l'histoire. Cela fonctionne bien jusqu'à un certain point lorsque la mémoire se remplit, ce qui rend le plantage du navigateur (onglet).

Alors ma question est: comment puis-je détecter quand la mémoire se remplit? Je stocke un tableau pour chaque génération dans un tableau qui forme l'histoire des générations. Cela prend des quantités massives de mémoire qui bloque le navigateur après quelques milliers de générations, selon la mémoire disponible. Je suis conscient du fait que le javascript ne peut pas vérifier la quantité de mémoire disponible, mais il doit y avoir une façon ...

Était-ce utile?

La solution

Je doute qu'il ya une façon de le faire. Même s'il y a, il serait probablement spécifique au navigateur. Je peux suggérer une autre façon, cependant.

Au lieu de stocker toutes les données pour chaque génération, les instantanés de magasin pris tous les temps en temps. Depuis le jeu de la vie de Conway est déterministe, vous pouvez facilement re-générer des trames futures à partir d'un instantané donné. Vous aurez probablement envie de garder un tampon de quelques images afin que vous puissiez faire rembobiner agréable et lisse.

En réalité, cela ne fait pas résoudre le problème, puisque vous serez à court d'espace par la suite. Cependant, si vous stockez tous les cadres de n, votre application va durer des temps de n plus, ce qui pourrait être juste assez longtemps. Je recommande que vous imposez des limites strictes sur la façon loin dans le passé, vous pouvez revenir en arrière afin que vous ayez un plafond sur le montant que vous avez à stocker. Déterminer que le nombre d'images qui seraient (10 minutes à 30 FPS = 18000 frames). Ensuite, diviser frames par le nombre d'images que vous pouvez stocker (profil différents navigateurs web pour comprendre cela) et qui est l'intervalle entre les instantanés que vous devez utiliser.

Autres conseils

Dogbert à peu près cloue. Vous ne pouvez pas savoir exactement la quantité de mémoire disponible il y a, mais vous pouvez savoir comment potentiellement important votre ensemble de données sera.

Donc, prendre la taille de chaque objet stocké dans le réseau, il faut multiplier par dimensions du tableau et qui a la taille d'une itération. Multipliez ce chiffre par le nombre souhaité d'itérations pour voir comment tout l'espace qu'il faudra, et ajuster en conséquence.

Ou, inspiré par Travis, simplement exécuter le modèle en sens inverse à partir du dernier tableau connu. Il est déterministe après tout.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top