2013-10-29 18 views
9

Obecnie pracujemy z Primefaces 3.4.2 i zauważyliśmy, że jeśli poruszasz się po naszej aplikacji używając ajax, bez przeładowywania strony, to zaczniemy używać dużej ilości pamięci. Obecnie za pomocą programu o nazwie CCDump analizować pamięć w firefox i zauważyliśmy, że trzymamy się wielu obiektów zombie dom. Zawężony skupić się na jednym obiekcie, który jest tworzony przez następujące primefaces selectBooleanCheckboxNajważniejsze pytania dotyczące wydajności

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

I widzę setki elementów tego przykład, gdy biegnę analizy CC. Gdybym „Pokaż graf” na jednym z elementów uzyskać następujące:

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 

Drugą rzeczą, którą jest fakt, że po nawigowania aplikację na chwilę skończę z hundereds javax.faces.resource/jquery/jquery.js.xhtml?ln=primefaces/eval/seq/xx w zakładce skryptu Firebug

Myślę, że istnieje detektor, który nie jest zwolniony, który jest podłączony do div utworzonego przez p:selectBooleanCheckbox i po prostu chciałem wiedzieć, jak mogę zwolnić ten obiekt po przeładowaniu tej sekcji strony z ajaxem.

Odpowiedz

8

Podczas korzystania z PrimeFaces dyskutowano na temat wycieków pamięci. "Bayer-dba" pisał to pytanie na forum PrimeFaces społeczności:

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

co doprowadziło do niniejszego raportu błędów i poprawek składania prawie rok temu:

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

nie wiem myślę, że ta łatka trafiła jeszcze do bagażnika, ale jeśli spojrzysz na kod, zobaczysz, że dodaje on metodę dispose() do każdego widgetu, aby wyczyścić zasoby widgetów po ich usunięciu.

Może się okazać, że zastosowanie tej poprawki poprawi twoją sytuację w odniesieniu do elementów Zombie DOM. Ponadto zauważam, że poprawka odnosi się do „PrimeFaces.widgetCache”, gdy jego rozliczających się zasobów, więc można spróbować coś podobnego w skrypcie:

delete PrimeFaces.widgetCache[id];

_Pez

+0

pierwszy link pod warunkiem przedstawienia niesamowite możliwości samokontroli i debugowania. +1 do twojej odpowiedzi i życzę też, żebym mógł dać to komuś, kto Bayer-dba jest na forum PF. –