0

私は Orbeon フォームに取り組んでおり、以下で説明するパフォーマンス関連の問題があります。

最初に 5 つのフィールドがあるフォームがあります。5 番目のドロップダウン フィールドで [はい] を選択するとxforms:group、フィールドのブロックが表示されるためです (ブロックには約 40 のフィールドがあります)。ブロックは繰り返しセクションにあるため、ブロックをいくつでも追加/削除できます。

ここで、たとえば 10 個のブロックを追加し、5 番目のドロップダウン フィールドを任意の値から「はい」に切り替えると、すべてのブロックを表示するのに 2 秒以上かかります。

2GB RAM の Windows XP デスクトップで Orbeon Forms 3.8 と Tomcat 6 を使用しています。

「はい」を選択した場合(xforms:group が true の場合の条件付き表示)、表示に時間がかかる場合について教えてください。

<xforms:group ref=".[instance('form-attributes')/flag='yes']" >
    //code for the controls here
</xforms:group>
4

2 に答える 2

1

次のようなコードを使用している場合:

<xforms:group ref=".[condition]">
    <!-- Large number of fields -->
</xforms:group>
  1. が false の場合condition、グループ内のフィールドは無関係です。XForms エンジンは、それらの値、読み取り専用ステータス、有効性、ラベル、ヒント、ヘルプ、アラートなどを計算しません。
  2. trueにconditionなると、グループのコンテンツが関連し、XForms エンジンはグループ内のすべてのコントロールを評価します。
  3. ブラウザーは、これらすべての変更を DOM に適用する必要があります。

通常、ステップ #2 は #3 よりもはるかに高速であり、特に IE7 では高速です。ステップ 3 での多数の更新を避けるために、このコードを記述する別の方法は次のとおりです。

<xhtml:div class="{if (condition) then '' else 'xforms-disabled'}">
    <!-- Large number of fields -->
</xhtml:div>

これにより、 内のフィールドdivは常に関連します。

  • 利点は、conditiontrue になったときに、ブラウザが行う必要があるのは、そのクラスをdiv. もちろん、値も変更されていない限り、必ずしも内部のすべてのコントロールを更新する必要はありません。
  • 欠点は、whileconditionが false の場合、サーバー上の XForms エンジンが内部のすべてのコントロールをdiv最新の状態に保つ必要があることです。

しかし、多くの場合、特に IE7 の速度低下が見られる場合、クライアントで得られるパフォーマンスは、サーバーで必要となる可能性のある処理の増加をはるかに上回ります。

于 2011-10-11T17:01:16.003 に答える
0


タグではなくタグを提案しているように見えるこのリンク を見つけました。元の投稿はコードクラッシュに関するものでしたが、提案された回避策により、IEでテストしたときにフォームのパフォーマンスがわずかに向上しました。このコードがあなたにいくらかの利益を与えることを願っています。spandiv

于 2011-09-13T12:36:48.447 に答える