2011-10-25 4 views
5

stiamo eseguendo il rendering di due grafici con flot, che condividono lo stesso asse x. le disegnamo con:Perdita di memoria flottante durante l'associazione di due grafici mediante panning

plot1 = $.plot($("#placeholderGraph1"), p1_data, d1_options); 
plot2 = $.plot($("#placeholderGraph2"), p2_data, d2_options); 

bisogna fare in modo che panning e zoom su un grafico ridisegna anche l'altro e viceversa. otteniamo questo con la conseguente al legame:

$("#placeholderGraph1").bind("plotpan", adjustGraph1Axes); 
$("#placeholderGraph2").bind("plotpan", adjustGraph2Axes); 

Se non aggiungiamo queste ultime due affermazioni, non v'è alcuna perdita di memoria e del browser (tutti i browser) gocce di memoria ogni volta che ridisegna. Ma con il suddetto legame, il browser non rilascia mai memoria e si accumula verso centinaia di megabyte.

Oltre a ciò, aggiorniamo anche le singole legende con i movimenti del mouse.

abbiamo provato seguendo approcci per la perdita di memoria, ma nessuno ha funzionato:
1. fare Plot1 e Plot2 variabili globali e l'eliminazione in modo esplicito il contenuto
2. Eliminazione div grafico e ricreando
3. eventi in modo esplicito non impegnativa prima rebinding
4. Tracciare un grafico vuoto prima di ridisegnare

Altri approcci per associare due grafici o scaricare la memoria?

+1

Non puoi continuare ad aggiungere informazioni sulla tua domanda precedente http://stackoverflow.com/questions/7755822/flot-memory-leak invece di crearne un altro? –

+0

Per favore, la prossima volta, [modifica] invece di creare una nuova domanda. – Will

+2

Un po 'più del codice sarebbe utile. – Fiddles

risposta

0

forse ho avuto un problema simile sincronizzare la selezione su un terreno panoramica e panoramica/zoom in trama principale; il mio problema era che il gestore di eventi per un plot stava attivando l'evento per l'altro plot e l'esecuzione del gestore di eventi corrispondente stava attivando l'evento per il primo plot, che ha causato l'esecuzione del gestore di eventi originale ... portando a un infinito ciclo continuo.

In altre parole, sei sicuro che il problema non è che l'esecuzione di adjustGraph1Axes non è innescando l'evento plotpan per il grafico 2 che provoca l'esecuzione di adjustGraph2Axes involontariamente, che innescano la plotpan per grafico 1 e provoca adjustGraph1Axes a eseguire e così via? Il mio post insieme alla soluzione si trova qui: Flot event for range updates in response to panning/zooming.

Ho usato un flag per risolvere il problema del ping-pong tra i due gestori di eventi e la mia soluzione è a < http://jsfiddle.net/apandit/nu2rr58h/12/>.