2013-10-29 13 views
9

Şu anda Primefaces 3.4.2 ile çalışıyoruz ve uygulamanızı ajax kullanarak geziyorsanız, sayfayı yeniden yüklemeden çok fazla bellek kullanmaya başladığımızı fark ettik. Şu anda firefox'taki belleği analiz etmek için CCDump isimli bir program kullanıyoruz ve bir sürü zombi dom nesnesini tuttuğumuzun farkına vardık. Aşağıdaki primefaces tarafından oluşturulan bir nesneye odaklanmak için daralmış Primefaces Performans soruları

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

selectBooleanCheckbox Ve CC Analizi çalıştırdığınızda bu örneğinin elemanları yüzlerce görüyorum. elemanların birinde ben göster "Graph" Eğer aşağıdaki alıyorum:

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 

Bir süre uygulama navigasyona sonra firebug komut sekmesinde hundereds javax.faces.resource/jquery/jquery.js.xhtml?ln=primefaces/eval/seq/xx ile bitirmek olduğunu fark başka şey

p:selectBooleanCheckbox tarafından oluşturulan div'a bağlı ayrılmamış bir dinleyici olduğunu düşünüyorum ve sadece ajax ile sayfanın bu bölümünü yeniden yükledikten sonra bu nesneyi nasıl serbest bırakabileceğimi bilmek istedim.

cevap

8

PrimeFaces kullanırken bellek sızıntıları hakkında bazı tartışmalar oldu. "Bayer-dba" PrimeFaces topluluk forumunda bu soru haberi: yaklaşık bir yıl önce bu hata raporu ve yama sunulması yol açtı

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

:

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

Bilmiyorum Bu düzeltme ekini henüz gövdeye taşıdığını düşünün, ancak koda bakarsanız, kaldırıldığında widget'ların kaynaklarını temizlemek için her bir pencere öğesi için bir dispose() yöntemi eklediğini görebilirsiniz.

Bu düzeltme ekinin uygulanmasının Zombie DOM öğeleriyle ilgili durumunuzu iyileştirdiğini fark edebilirsiniz. Ayrıca , ben yama ne zaman kendi takas dışarı kaynaklar "PrimeFaces.widgetCache" referans yapan fark, Yani komut benzer bir şey deneyebilirsiniz:

delete PrimeFaces.widgetCache[id];

_Pez

+0

ilk bağlantı sağlanan gösterileri inanılmaz kendi kendine araştırma ve hata ayıklama yetenekleri. Cevabınız +1 ve dilediğim gibi, bayer-dba'nın PF forumuna da verebileceği gibi. –