Ho una visualizzazione (basata sullo shader) che sto utilizzando in un browser Chrome. Recentemente ho esaurito la memoria dopo aver periodicamente aggiornato il pool di dati dal server, o se la visualizzazione è troppo grande (richiedo troppi dati?), Il JSON passato dal back-end termina in modo imprevisto. Devo rendere il programma più efficiente per evitare questi arresti anomali.
Ecco la sua forma:
- La visualizzazione è una griglia di forme modellate.
- Le forme sono costruite in base agli oggetti dati passati dal back-end
- Le immagini nella griglia vengono periodicamente aggiornate: viaggiano attraverso lo schermo e mentre le vecchie colonne della griglia scorrono nuove colonne con nuove forme scorrono su
- Ho un gruppo permanente di nuovi dati che attingo dal front-end per aggiungere queste nuove forme.
- Quando la piscina è quasi esaurita, chiedo un nuovo, fresco gruppo di persone dal back-end.
Solitamente quando si richiede un nuovo pool di dati (JSON) che Chrome visualizza l'avviso "Aw Snap! Google Chrome ran out of memory...
. L'altra volta ciò accade quando richiedo le informazioni per troppe nuove forme dal back-end; in tal caso, il JSON finisce inaspettatamente.
Data questa panoramica, dove dovrei iniziare a migliorare l'efficienza?
Quanto è grande il JSON?
Quello che posso passare senza che finisca prematuramente, ma non posso aggiornare perché la memoria è esaurita è 207,512848 MB quando lo eseguo tramite sys.getsizeof()
di Python.
Che cosa usi per passare i dati dal server al client?
Sul front end utilizzo un XMLHttpRequest () con i risultati racchiusi in una Promessa. Per connettere il back-end Python al front-end Javascript sto usando Flask .
Aggiornamento sull'utilizzo della memoria:
Stavo monitorando l'utilizzo della memoria utilizzando il Task Manager di Chrome e ho notato che mentre l'utilizzo live di Javascript si aggirava intorno a 511.000 k, il valore nella colonna della memoria aumentava costantemente a 2 GB nel corso di circa 10 minuti man mano che i pool di dati venivano aggiornati loro stessi più volte. Si tratta di un problema di perdita o di garbage collection?
Aggiornamento in caso di perdita del contesto
Ho finito per entrare e aumentare manualmente la cache di memoria assegnata a Chrome e aumentare la memoria virtuale sulla macchina. Poiché questa visualizzazione sarà specifica del sito e non un'app per qualsiasi macchina, questo approccio dovrebbe andare bene. Tuttavia, WebGL ora perde il contesto dopo che ho eseguito il programma e fatto clic su alcune forme. A giudicare da questa domanda SO , penso che stia perdendo il contesto perché dopo un po 'la CPU impiega troppo tempo a rispondere. Non sei sicuro di cosa c'è qui.