2012-02-20 10 views
9

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ò.

+1

Stai eseguendo Firebug in Firefox? Se sì, cosa succede se lo disabiliti? –

+0

Come ho detto nella domanda - Ho provato a disattivare firebug. non fa differenza. –

+0

È molto strano. Puoi collegare a un sito che mostra il problema? –

risposta

1

Se stai usando un sacco di ajax, puoi provare a impostare l'opzione $ .ajax() "cache" su false. Dovrebbero essere grandi quantità di dati, tuttavia, per avere un impatto sulla memoria del browser.

Per motivi di prestazioni, in genere si desidera eseguire la maggior quantità di manipolazione possibile in memoria e scrivere sul DOM il minor numero possibile di volte.

Potrebbe semplicemente essere che la versione di FF che stai utilizzando non sta recuperando memoria così come altri browser a cui stai confrontando.

Non mi sembra che chiusure sarebbe il colpevole. Sembra più un vecchio problema di IE.

Se è davvero un problema, puoi provare a distruggere in modo esplicito oggetti di grandi dimensioni quando sai che non vengono più utilizzati.

1

non è necessariamente una risposta, ma stai riscontrando questi problemi con l'ultima versione di Firefox (13)? Ci sono stati molti problemi legati alla memoria e alle prestazioni con questa versione e mozilla ha affermato che stanno lavorando per ripararli.

Inoltre, se si caricano molti elementi durante il caricamento della pagina e non vengono visualizzati tutti inizialmente, è possibile utilizzare il plug-in waypoint di jquery per caricare dinamicamente queste immagini. Ridurrebbe molto del peso che il browser percepisce al caricamento della pagina.

Spero che tutto ciò sia stato utile. ecco alcune materiale di lettura che possono aiutare ulteriormente:

http://support.mozilla.org/en-US/kb/firefox-slow-how-make-it-faster http://support.mozilla.org/en-US/kb/firefox-uses-too-much-memory-ram

e http://imakewebthings.com/jquery-waypoints/

2

ho visto la mia colpito 2GB di RAM

ho un widget nel mio dock che fa scattare il comando che viene salvato in un file:

killall -c firefox 
sleep 1 
open -a Firefox 
sleep 1 
exit 

Modo rapido per ripristinare FF e recuperare tutte le tue schede. Hai bisogno di farlo quasi tutti i giorni :) Se non fosse per Firebug sarei su Chrome ora

Problemi correlati