javascript - Primefaces 性能问题

标签 javascript jquery jsf primefaces

目前使用 Primefaces 3.4.2,我们注意到,如果您使用 ajax 浏览我们的应用程序,而不重新加载页面,我们就会开始使用大量内存。目前正在使用一个名为 CCDump 的程序分析 firefox 中的内存并注意到我们持有大量僵尸 dom 对象。缩小范围以关注由以下 primefaces 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>

当我运行 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 

我注意到的另一件事是,在浏览应用程序一段时间后,我最终得到了 hundereds javax.faces.resource/jquery/jquery.js.xhtml?ln=primefaces/eval/seq/xx 在 firebug 脚本选项卡中

我认为有一个未被释放的监听器连接到由 p:selectBooleanCheckbox 创建的 div,我只是想知道如何在重新加载该部分后释放该对象使用 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() 方法,以便在删除时清除小部件资源.

您可能会发现应用此补丁可以改善僵尸 DOM 元素的情况。 另外,我注意到补丁在清除资源时引用了“PrimeFaces.widgetCache”,因此您可以在脚本中尝试类似的操作:

delete PrimeFaces.widgetCache[id];

_佩兹

关于javascript - Primefaces 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19670658/

相关文章:

javascript - 逗号运算符到分号

javascript - Angular 1.x 迁移性能问题

javascript - jquery 不能在 IE、Chrome 中工作,可以在 FF 中工作

javascript - 在 Angular 2 应用程序中全局使用 jQuery

java - JSF 数据表过滤器示例

java - 如何防止单击 <h :commandLInk> 时页面刷新

javascript - 如何获取函数的属性和方法?

JavaScript:如何以编程方式确定网络 "fold"?

c# - jquery 无法从 C# var 获取变量值

JSF 属性引用范围内的对象,其生命周期比目标范围 View 短