Sono perplesso sul motivo per cui la memoria della mia app aumenta molto più velocemente in Firefox rispetto ad altri browser.La memoria specifica di Firefox aumenta nella pesante app AJAX
In linea di principio, l'app utilizza una quantità accettabile di AJAX, con l'azione di base di caricare nuovi gruppi di post con un livello medio di HTML e generalmente con immagini di grandi dimensioni. L'importo totale dei dati AVG per post (incl le immagini caricate) è inferiore a 1 MB, forse 900k. Usando jQuery 1.7.1.
Nella memoria di Chrome sembra essere stabile, ma in Firefox, ogni caricamento di post risulta in circa 20 MB di nuova memoria. Dal momento che vengono caricati molti post, si ottengono rapidamente oltre 1 GB e persino 1,4 GB in memoria e le cose si fermano rapidamente.
Scavando in Firefox, ho provato ad eliminare chiusure e variabili estranee usando 'cancella'. Nessun grande miglioramento. Ho quindi iniziato a rimuovere funzionalità, e sembrava che TUTTO dia un contributo.
Rimozione delle descrizioni, un eccessivo ricaricamento di widget FB (un widget di commenti per post), ho apportato un notevole miglioramento, fino a 10 MB di nuova memoria per post.
Ma oltre a questo, non posso scendere molto più in basso! Fondamentalmente, se carico le nuove immagini html + (ancora circa 900k) tramite $ .post() ogni post aggiunge ~ 8mb di nuova memoria, anche se le nuove immagini hanno "display: none". (ho anche provato a disabilitare firebug).
Questo è il mio primo tentativo di gestione della memoria, ma questo mi sembra un sacco di spese generali, e strano dal momento che non penso che la memoria aumenti davvero così in Chrome. Sembra che dovrei aumentare la memoria più in linea con la quantità di dati caricati, non 10 volte! (o nessuno come in Chrome sarebbe bello ...)
È davvero ragionevole? Qualche idea su dove cercare problemi o cosa posso fare per ridurre ulteriormente questo problema?
Grazie!
Aggiornamento:
Come Boris giustamente osservato, l'incremento memoria è quasi interamente dovuta alle immagini (almeno 80%). Ma di nuovo l'aumento della memoria è molto più (10x) della dimensione delle immagini caricate. Un'altra cosa che ho imparato a usare è la memoria: se apro semplicemente una nuova scheda vuota, la memoria si riduce rapidamente e quasi tutta la memoria associata all'immagine scompare. Immagino che sia GC che sta dando il calcio d'inizio, e quindi come Boris indovina, sembra che sia probabilmente un problema di GC?
In tal caso, come posso indagare sul motivo per cui non viene attivato in modo naturale solo in FF? ci sono modi per attivarlo in JS? Come ho già detto, ho provato a passare e rimuovere le chiusure ...
Un altro pensiero, gli eventi di binding (tramite jQuery) agli elementi di immagine anziché i div potrebbero essere negativi? Pensavo che jQuery si occupasse di tutte quelle cose però.
Stai eseguendo Firebug in Firefox? Se sì, cosa succede se lo disabiliti? –
Come ho detto nella domanda - Ho provato a disattivare firebug. non fa differenza. –
È molto strano. Puoi collegare a un sito che mostra il problema? –