Domanda

Ho costruito Life di Conway con javascript / jquery per eseguirlo in un browser qui . Chrome, Firefox e Opera o Safari farlo abbastanza velocemente in modo preferibilmente non usare IE per questo. IE9 è ok però. Mentre la generazione di nuove generazioni di vita che sto memorizzazione delle generazioni precedenti, al fine di essere in grado di tornare a piedi attraverso la storia. Questo funziona bene fino a un certo punto, quando la memoria si riempie, il che rende il crollo del browser (scheda).

Quindi la mia domanda è: come faccio a rilevare quando la memoria si sta riempiendo? Sto memorizzazione di un array per ogni generazione in un array che forma la storia di generazioni. Questo richiede grandi quantità di memoria che va in crash il browser dopo un paio di migliaia di generazioni, a seconda della memoria disponibile. Sono consapevole del fatto che il javascript non può controllare la quantità di memoria disponibile, ma ci deve essere un modo ...

È stato utile?

Soluzione

dubito che ci sia un modo per farlo. Anche se non v'è, probabilmente sarebbe browser specifico. Posso suggerire un modo diverso, però.

Invece di memorizzare tutti i dati per ogni generazione, istantanee memorizzare preso ogni tanto. Dal gioco della vita del Conway è deterministico, si può facilmente ri-generare fotogrammi futuri di un dato un'istantanea. Probabilmente si vorrà mantenere un buffer di pochi fotogrammi in modo da poter effettuare il riavvolgimento bella e liscia.

In realtà, questo non fa effettivamente risolve il problema, dal momento che sarete a corto di spazio alla fine. Tuttavia, se si memorizzano ogni frame n, l'applicazione durerà volte n più lungo, che potrebbe essere solo abbastanza a lungo. Vorrei raccomandare che si impongono alcuni limiti duri su come lontano nel passato è possibile riavvolgere in modo da avere un tappo su quanto è necessario memorizzare. Determinare che il numero di fotogrammi che sarebbero (10 minuti a 30 FPS = 18000 frames). Poi, dividere frames da quanti fotogrammi è possibile memorizzare (profilo vari browser web per capirlo) e che è l'intervallo tra le istantanee si dovrebbe usare.

Altri suggerimenti

Dogbert praticamente inchiodato. Non si può sapere esattamente quanto la memoria disponibile non c'è, ma si può sapere come potenzialmente elevato il set di dati sarà.

Quindi, prendere la dimensione di ciascun oggetto memorizzato nella matrice, moltiplicare per dimensioni di matrice e che è la dimensione di un'iterazione. Moltiplicare per il numero desiderato di iterazioni per vedere come totale spazio molto ci vorrà, e regolare di conseguenza.

In alternativa, ispirato da Travis, è sufficiente eseguire il modello in senso inverso dall'ultima serie conosciuta. E 'deterministica, dopo tutto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top