0

TomEE 1.5.2 Plus (myfaces 2.1.13) と Primefaces 3.5 を使用して Web アプリケーションを開発しました。通常のサーバー応答時間は約 70 ミリ秒で、パフォーマンスは許容範囲内です。TomEE 7.0.0-M3 Plus (myfaces 2.2.9) および Primefaces 5.3 に移行すると、これらの応答時間は最大 900 ミリ秒になりました。[ネットワーク] タブで Firefox Web コンソールを使用すると、これらのタイミングはすべて 0 ミリ秒の受信時間で待機しています。これらはp:remoteCommandサーバー リクエストのようです。p:dialog私たちのアプリには、マネージド View Scoped Bean を使用した多くのユーザー インターフェイスがあります。ダイアログが多いp:remoteCommandsほど、パフォーマンスが低下します。

TomEE 7.0.1 Plus (myfaces 2.2.10 および Primefaces 6.0) を試しましたが、これ以上の結果は得られませんでした。テスト アプリでは、ボタンと ap:remoteCommand を使用してカウンターをインクリメントし、フォームを更新し、20 個のダイアログからスケーリングした単純なダイアログが示されました。 Bean とボタンを 40 にすると、TomEE 7.0.0 と Primefaces 5.3 を使用すると、待機時間 (50ms から 100ms) が 2 倍になります. 同じコードを TomEE 1.5.2 と Primefaces 3.5 で実行しても、違いはありません (30ms)。

TomEE 1.5.2/Primefaces 3.5 環境で、または Production でビルドする場合facesContext.application.projectStage = Development、違いはありません。TomEE 7.0.0/Primefaces 5.3 を使用したプロダクション モードでは、プロダクション時間が約 10% 短縮されました。以下のサンプル テスト アプリ コード:

メインアプリ

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:p="http://primefaces.org/ui"
  xmlns:cc="http://java.sun.com/jsf/composite/components">

<h:head>
  <title>COUNTER</title>
</h:head>


<h:body>
  <ui:include src="/Dialogs/counterDialog.xhtml" />
  <ui:include src="/Dialogs/counterDialog2.xhtml" />
  <ui:include src="/Dialogs/counterDialog3.xhtml" />
  <ui:include src="/Dialogs/counterDialog4.xhtml" />
  <ui:include src="/Dialogs/counterDialog5.xhtml" />
  <ui:include src="/Dialogs/counterDialog6.xhtml" />
  <ui:include src="/Dialogs/counterDialog7.xhtml" />
  <ui:include src="/Dialogs/counterDialog8.xhtml" />
  <ui:include src="/Dialogs/counterDialog9.xhtml" />
  <ui:include src="/Dialogs/counterDialog10.xhtml" />
  <ui:include src="/Dialogs/counterDialog11.xhtml" />
  <ui:include src="/Dialogs/counterDialog12.xhtml" />
  <ui:include src="/Dialogs/counterDialog13.xhtml" />
  <ui:include src="/Dialogs/counterDialog14.xhtml" />
  <ui:include src="/Dialogs/counterDialog15.xhtml" />
  <ui:include src="/Dialogs/counterDialog16.xhtml" />
  <ui:include src="/Dialogs/counterDialog17.xhtml" />
  <ui:include src="/Dialogs/counterDialog18.xhtml" />
  <ui:include src="/Dialogs/counterDialog19.xhtml" />
  <ui:include src="/Dialogs/counterDialog20.xhtml" />

<h:form id="countForm">
  <input id="clickMe" type="button" value="clickMe" onclick="openCounterDialog();" />
  <h:outputText id="count" value="#{counter.count}" />
  <input id="clickMe2" type="button" value="clickMe2" onclick="openCounterDialog2();" />
  <h:outputText id="count2" value="#{counter2.count}" />
  <input id="clickMe3" type="button" value="clickMe3" onclick="openCounterDialog3();" />
  <h:outputText id="count3" value="#{counter3.count}" />
  <input id="clickMe4" type="button" value="clickMe4" onclick="openCounterDialog4();" />
  <h:outputText id="count4" value="#{counter4.count}" />
  <input id="clickMe5" type="button" value="clickMe5" onclick="openCounterDialog5();" />
  <h:outputText id="count5" value="#{counter5.count}" />
  <input id="clickMe6" type="button" value="clickMe6" onclick="openCounterDialog6();" />
  <h:outputText id="count6" value="#{counter6.count}" />
  <input id="clickMe7" type="button" value="clickMe7" onclick="openCounterDialog7();" />
  <h:outputText id="count7" value="#{counter7.count}" />
  <input id="clickMe8" type="button" value="clickMe8" onclick="openCounterDialog8();" />
  <h:outputText id="count8" value="#{counter8.count}" />
  <input id="clickMe9" type="button" value="clickMe9" onclick="openCounterDialog9();" />
  <h:outputText id="count9" value="#{counter9.count}" />
  <input id="clickMe10" type="button" value="clickMe10" onclick="openCounterDialog10();" />
  <h:outputText id="count10" value="#{counter10.count}" />
<div>
  <input id="clickMe11" type="button" value="clickMe11" onclick="openCounterDialog11();" />
  <h:outputText id="count11" value="#{counter11.count}" />
  <input id="clickMe12" type="button" value="clickMe12" onclick="openCounterDialog12();" />
  <h:outputText id="count12" value="#{counter12.count}" />
  <input id="clickMe13" type="button" value="clickMe13" onclick="openCounterDialog13();" />
  <h:outputText id="count13" value="#{counter13.count}" />
  <input id="clickMe14" type="button" value="clickMe14" onclick="openCounterDialog14();" />
  <h:outputText id="count14" value="#{counter14.count}" />
  <input id="clickMe15" type="button" value="clickMe15" onclick="openCounterDialog15();" />
  <h:outputText id="count15" value="#{counter15.count}" />
  <input id="clickMe16" type="button" value="clickMe16" onclick="openCounterDialog16();" />
  <h:outputText id="count16" value="#{counter16.count}" />
  <input id="clickMe17" type="button" value="clickMe17" onclick="openCounterDialog17();" />
  <h:outputText id="count17" value="#{counter17.count}" />
  <input id="clickMe18" type="button" value="clickMe18" onclick="openCounterDialog18();" />
  <h:outputText id="count18" value="#{counter18.count}" />
  <input id="clickMe19" type="button" value="clickMe19" onclick="openCounterDialog19();" />
  <h:outputText id="count19" value="#{counter19.count}" />
  <input id="clickMe20" type="button" value="clickMe20" onclick="openCounterDialog20();" />
  <h:outputText id="count20" value="#{counter20.count}" />
</div>

</h:form>

</h:body>

</html>

ダイアログ

<ui:composition
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:p="http://primefaces.org/ui"
  xmlns:cc="http://java.sun.com/jsf/composite/components">

  <p:dialog
    id="counterDialog1"
    header="Counter Form"
    widgetVar="counterWidget"
    closeOnEscape="true" >

    <p:ajax
      event="close"
      listener="#{counter.buttonHit()}"
      update="counterForm"
      resetValues="true" />

    <h:form id="counterForm"> 

      <p:panel id="counterPanel">        
          <input id="countMe" type="button" value="countMe" onclick="customfunction();" />
          <p:remoteCommand name="increment" actionListener="#{counter.increment}" update=":countForm" />
      </p:panel>

      <div
        align="center"
        style="padding: 5px">

        <p:commandButton
          id="counterOK"
          value="Ok"
          cache="false"
          ajax="true"
          style="valign:bottom;float:left;padding-left:10px"
          onclick="closeCounterDialog()" />

        <p:commandButton
          id="counterCancel"
          value="Cancel"
          style="valign:bottom;float:center;padding-right:10px"
          onclick="closeCounterDialog()"
          process="@this">

        </p:commandButton>

        <p:commandButton
          id="counterHelp"
          value="Help"
          style="valign:bottom;float:right;padding-right:10px"
          disabled="true">
        </p:commandButton>

        <p:defaultCommand
          target="counterOK" />

      </div>
    </h:form>
  </p:dialog>

  <script type="text/javascript">
            //<![CDATA[
            // Keep script tag outside of any component tag that may need to get updated
            // so JavaScript objects are not recreated. E.g. removing event handlers
            // won't work after update since handler function is a different intance
            function openCounterDialog ( event )
            {
                counterWidget.show();
            }

            /**
             * Remove all the relevant event listeners, re-enable normal behavior and
             * hide the dialog
             */
            function closeCounterDialog ()
            {
                counterWidget.hide();
            }

            function customfunction() 
            {
              //your custom code
              increment();  //makes a remote call
            }

       //]]>
     </script>



</ui:composition>

マネージド Bean クラス

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import org.primefaces.context.RequestContext;

@ManagedBean(name = "counter")
@ViewScoped
public class Counter implements Serializable
{
/** Prevents compiler generating brittle one */
  private static final long serialVersionUID = -2L;


  int count;  


  public Counter()
  {
    count = 0;
  }

  public void increment()
  {
    count++;
  }

  public int getCount()
  {
    return count;
  }

  public void buttonHit()
  {
    RequestContext.getCurrentInstance ().execute ( "closeCounterDialog()" );
  }

}

何か案は?前もって感謝します!

4

1 に答える 1

0

primefaces の一部のバージョンでは、リクエストごとに 1 つの Bean 検証 Validator が作成されます。カスタマイズされている場合 (JSF 環境ではよくあることですが)、アプリケーションの速度が大幅に低下します。この問題がないバージョンを使用してください。

関連する問題は次のとおりです: https://github.com/primefaces/primefaces/issues/1119

于 2016-07-21T18:27:40.033 に答える