Lan*_*ter 9 javascript jquery jsf primefaces
目前正在使用Primefaces 3.4.2,我们注意到如果你使用ajax浏览我们的应用程序,而不重新加载页面,我们开始使用大量内存.目前正在使用一个名为CCDump的程序来分析firefox中的内存,并注意到我们在哪里持有很多僵尸dom对象.缩小范围以关注由以下素数selectBooleanCheckbox创建的一个对象
<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>
Run Code Online (Sandbox Code Playgroud)
当我运行CC分析时,我看到了这个实例的数百个元素.如果我在其中一个元素上"显示图形",我会得到以下内容:
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
Run Code Online (Sandbox Code Playgroud)
我注意到的另一件事是,在导航应用程序一段时间后,我最终javax.faces.resource/jquery/jquery.js.xhtml?ln=primefaces/eval/seq/xx
在firebug脚本选项卡中找到了躲避者
我认为有一个侦听器没有被释放连接到由div创建的div p:selectBooleanCheckbox
,我只是想知道如何在用ajax重新加载页面的那一部分之后释放这个对象.
在使用PrimeFaces时,已经有一些关于内存泄漏的讨论."bayer-dba"在PrimeFaces社区论坛上发布了这个问题:
http://forum.primefaces.org/viewtopic.php?f=3&t=25942&sid=caab96cad56a307f298b6267bf1936ef
这导致近一年前这个错误报告和补丁提交:
http://code.google.com/p/primefaces/issues/detail?id=4848
我不认为这个补丁已经进入了主干,但是如果你看一下代码,你可以看到它为每个小部件添加了一个dispose()方法,以便在删除时清理小部件资源.
您可能会发现应用此修补程序可以改善您对Zombie DOM元素的处理.另外,我注意到补丁在清除资源时引用了"PrimeFaces.widgetCache",所以你可以在你的脚本中尝试类似的东西:
delete PrimeFaces.widgetCache[id];
_Pez