Ho un'app Javascript abbastanza complessa, che ha un ciclo principale che viene chiamato 60 volte al secondo. Sembra che ci sia un sacco di garbage collection in corso (basato sull'output "a dente di sega" dalla sequenza temporale della memoria negli strumenti di sviluppo di Chrome) - e questo spesso influisce sulle prestazioni dell'applicazione.
Quindi, sto cercando di ricercare le migliori pratiche per ridurre la quantità di lavoro che deve fare il garbage collector. (La maggior parte delle informazioni che sono stato in grado di trovare sul Web riguarda l'evitare perdite di memoria, che è una domanda leggermente diversa: la mia memoria si sta liberando, è solo che c'è troppa raccolta di rifiuti in corso.) che questo si riduce principalmente al riutilizzo degli oggetti il più possibile, ma ovviamente il diavolo è nei dettagli.
L'app è strutturata in "classi" sulla falsariga di Simple JavaScript Inheritance di John Resig .
Penso che un problema sia che alcune funzioni possono essere chiamate migliaia di volte al secondo (poiché vengono utilizzate centinaia di volte durante ogni iterazione del ciclo principale), e forse le variabili di lavoro locali in queste funzioni (stringhe, array, ecc.) potrebbe essere il problema.
Sono a conoscenza del raggruppamento di oggetti per oggetti più grandi / pesanti (e lo usiamo fino a un certo punto), ma sto cercando tecniche che possano essere applicate su tutta la linea, in particolare relative a funzioni che vengono chiamate molte volte in cicli stretti .
Quali tecniche posso utilizzare per ridurre la quantità di lavoro che deve svolgere il garbage collector?
E, forse anche, quali tecniche si possono impiegare per identificare quali oggetti vengono raccolti maggiormente dai rifiuti? (È una base di codice molto grande, quindi il confronto delle istantanee dell'heap non è stato molto fruttuoso)
