2013-10-29 14 views
9

Attualmente stiamo lavorando con Primefaces 3.4.2 e abbiamo notato che se navighi attraverso la nostra app utilizzando ajax, senza ricaricare la pagina, iniziamo a utilizzare molta memoria. Attualmente utilizza un programma chiamato CCDump per analizzare la memoria in firefox e abbiamo notato che ci teniamo a un sacco di oggetti zombie dom. Ridotto per mettere a fuoco su un oggetto che viene creato dai seguenti primefaces selectBooleanCheckboxPrimefaces Domande sulle prestazioni

<p:selectBooleanCheckbox id="compareChkbx" 
    value="#{cc.attrs.xProd.selected}" styleClass="selectBooleanCheckbox" 
    rendered="#{dto.size > 1}" > 
    <p:ajax event="change" oncomplete="radioButtonSelected()" 
     listener="#{compareBean.onClickCompare(cc.attrs.xProd, cc.attrs.dto.partTerminology.partTerminologyId)}" update=":hform:lookupResults:pageInfo :hform:compareProducts:compareGroup @this" process="@this" /> 
</p:selectBooleanCheckbox> 

E sto vedendo centinaia di elementi di questo esempio quando ho eseguire l'analisi CC. Se io "Mostra grafico" a uno degli elementi ottengo il seguente:

FragmentOrElement (xhtml) input id='lookupResults:CatResultList:0:aapPartType:list-by-cat:22:aapProd:aapProd:compareChkbx_input' http://localhost:8080/epcfe-web/main.xhtml 
JS Object (HTMLInputElement) 
FragmentOrElement (xhtml) div class='ui-helper-hidden-accessible' http://localhost:8080/epcfe-web/main.xhtml 
FragmentOrElement (xhtml) div id='lookupResults:CatResultList:0:aapPartType:list-by-cat:22:aapProd:aapProd:compareChkbx' class='ui-chkbox ui-widget selectBooleanCheckbox' http://localhost:8080/epcfe-web/main.xhtml 
nsChildContentList 
nsEventListenerManager 

L'altra cosa che ho notato è che, dopo la navigazione l'applicazione per un po 'io alla fine con hundereds javax.faces.resource/jquery/jquery.js.xhtml?ln=primefaces/eval/seq/xx nella scheda sceneggiatura Firebug

Penso che ci sia un listener che non è stato deallocato che è collegato al div creato dallo p:selectBooleanCheckbox e volevo solo sapere come posso rilasciare questo oggetto dopo aver ricaricato quella sezione della pagina con ajax.

risposta

8

C'è stata una discussione sulle perdite di memoria durante l'utilizzo di PrimeFaces. "Bayer-dba" postato domanda sul forum primefaces comunità:

http://forum.primefaces.org/viewtopic.php?f=3&t=25942&sid=caab96cad56a307f298b6267bf1936ef

che ha portato a questa segnalazione di bug e patch di presentazione quasi un anno fa:

http://code.google.com/p/primefaces/issues/detail?id=4848

non lo faccio credo che questa patch sia già entrata nel trunk, ma se si guarda il codice, si può vedere che aggiunge un metodo dispose() a ciascun widget per eliminare le risorse dei widget quando vengono rimosse.

Potresti scoprire che l'applicazione di questa patch migliora la tua situazione rispetto agli elementi Zombie DOM. Inoltre, ho notato che la patch fa riferimento a "PrimeFaces.widgetCache" quando i suoi sgombrare le risorse, così si potrebbe provare qualcosa di simile nello script:

delete PrimeFaces.widgetCache[id];

_Pez

+0

Il primo link fornito spettacoli incredibili capacità di auto-ricerca e debugging. +1 alla tua risposta e vorrei anche darlo a chiunque bayer-dba sia nel forum PF. –