簡體   English   中英

Primefaces JSF多次打開對話框會緩慢增加瀏覽器的內存

[英]Primefaces JSF Opening a dialog multiple times slowly increases browser memory

我正在使用Primefaces 4.0,JSF 2.1.11

我有一個帶有按鈕的頁面,該按鈕調用了prime-faces dialog.show(),並在單擊完成后出現對話框,單擊完成,它將刷新頁面,並將新項添加到prime-faces dataTable中。 每次我單擊按鈕打開對話框並填寫對話框,然后單擊完成,瀏覽器的內存就會增加。 在自動化測試中,一旦打開對話框125次(我們的用戶可以連續執行800次),瀏覽器就會用盡內存。 在IE8的125個項目中,內存使用量為880 MB。

所以我的問題是如何防止這種情況發生?

更多信息:使用Glassfish 3對Bean進行觀察,此問題在所有瀏覽器中都會發生,但在較舊的瀏覽器中會更嚴重。

我已采取的步驟:1.每次在對話框上執行.show().hide()。 2.我試圖調用javascript清空DOM中的div,但沒有成功。

我查看了primefaces問題,但沒有看到任何內存泄漏報告,如果我讓頁面坐着打開,內存也不會增加,只有當我使用頁面並打開和關閉對話框時才會顯示。

更新:

這是一些代碼

這種形式在另一種形式之外

  <h:form id="lineItemForm">
        <p:dialog id="addLineItemDialogId" widgetVar="lineItemDialog" header="Line item" width="900" resizable="false"
          modal="true" showEffect="fade">

... 
...


             <p:commandLink value="Done"
                            onclick="actionStarted($(this))"
                            action="#{lineItemView.save}"
                            update=":wizardForm:lineItemWizardPanel"
                            oncomplete="actionComplete(); saveLineItem(args);"/>

    </h:form>

saveLineItem(args)是一種javascript方法,在驗證檢查后調用.hide()

這是對.show()的調用,它的格式為WizardForm。

    <h:form id="wizardForm"/>
...
...
          <p:commandLink value="Add Item"
                        action="#{lineItemView.loadLineItemFromRequest(requisitionView.request)}"
                        process="@this"
                        update=":lineItemForm"
                        oncomplete="lineItemDialog.show()"/>

更新因此,它最終成為了一個紅塵。 我刪除了后端方法調用,並且內存泄漏消失了。 看起來像是使用ajax引起問題的dataTable。 查找它,並在Primefaces 5 http://www.beyondjava.net/blog/primefaces-5/中對其進行了修復

盡管不確定,我會猜測。 嘗試構建如下代碼:

<h:body>
    <h:form id="mainForm">
        ...
        ...
        ...
        ...
    </h:form>

    <p:dialog>
        <h:form id="dialogForm">
            ...
        </h:form>
    </p:dialog>
</h:body>

在用於顯示對話框的按鈕上,使用update="dialogForm"

我相信,如果update對話框本身或其父對話框之一,則可能導致多個對話框相互隱藏。 這可能解釋了內存使用情況。 除此之外,最佳做法是在主窗體的外部放置對話框。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM