TLDR: Направих симулация на избухване на епидемия, която може да се играе тук.
Преброяване на резултатите
Ето как преброих резултатите, които бяха въведени в диаграмите ми и актуализирани на екрана. Функцията за броене се изпълнява всеки път, след като съм актуализирал състоянието на всяко от моите зърна в света.
function count() { sCount = 0 iCount = 0 dCount = 0 qCount = 0 rCount = 0 zCount = 0 loopWorld( function( i ) { switch( world[ i ].color ) { case sColor: sCount++ break case iColor: iCount++ break case dColor: dCount++ break case qColor: qCount++ break case rColor: rCount++ break case zColor: zCount++ break } } ) sText.textContent = `Susceptible: ${ sCount }` iText.textContent = `Infected: ${ iCount }` dText.textContent = `Detected: ${ dCount }` qText.textContent = `Quarantined: ${ qCount }` rText.textContent = `Recovered: ${ rCount }` zText.textContent = `Dead: ${ zCount }` tText.textContent = `Days: ${ time }` }
След като настроих цялото това нещо, разбрах, че преминавам през всяко зърно и отчитам състоянието по време на всеки кадър. Не съм много сигурен дали това е най-оптималния начин да го направя. Какво ще стане, ако актуализирам само броя, които се променят всеки път, когато статусът на всяко от моите зърна се променя?
Единственият проблем, който не промених това, е защото знам, че със сигурност ще има дупка от червеи от грешки, ако актуализирам броя си само за всяка отделна промяна, а не като цяло. Ще ми трябват допълнителни няколко часа, за да се опитам да пренапиша промяната на състоянието си, така че да управлява актуализацията на броя по точен начин. И не съм сигурен дали в края на всички тези проблеми ще бъде ли толкова по-ефективно или просто спестявам около 1ms.
Но ако пишете това от нулата, надявам се, че можете да обмислите да броите статуса един по един като промяна на статуса, вместо да броите всичко наведнъж, независимо от промените.