1

ここでの一般的な質問です。ユーザーがデータベース内の多数のレコードをフィルタリングできるようにするシンプルなWebアプリがあります。現在、これは特に大きなリストではありません(現時点では1,200〜1,500)

しかし、私はエラーのない散発的な問題を抱えているようで、誰かが似たようなものを持っているのではないかと思っていました。

基本的に、返されたリストは期待される数の結果(例1,267)を返しますが、すべての結果が表示されない場合があります。検索を実行して1,267個すべてを取得する場合もあれば、ページが74または123などで「ストール」しているように見える場合もあります。もう一度検索を押すと同じことが起こる可能性があります。もう一度押すと、今回は機能します(1,267個すべてが返されます)。その後、次の2〜3回は機能し、その後、たとえば73件の結果のみを表示するように戻ります。

これで、Javaの観点からはリストが正しいので、これはStrutsタグ(特に<s:iterator>)の問題である必要があります。

他の誰かがこれを経験したことがあるかどうか、そしてそれを回避する方法を考えていました。

また、これに注意すると、結果は非常にゆっくりと読み込まれるように見えます。ほぼ10のブロックのように、2秒の遅延、さらに10の遅延があるため、1,267は約1分かかると想像できます。これは非常に間違っているようです。

ご覧のとおり、イテレータには特別なことは何もありません。

 <s:iterator value="resultList" var="obj" status="row">
    <tr>
        <td>[<s:property value="%{#row.count}"/>]</td>
        <td noWrap="true"align="center"><input type="checkbox" name="allocateChkBox" value="<s:property value="#obj.id"/>" /></td>      
        <td noWrap="true"><s:property value="#obj.reference"/></td>
        <td noWrap="true"><s:property value="#obj.status"/></td>
        <td noWrap="true"><s:property value="#obj.resource"/></td>
        <td noWrap="true"><s:property value="#obj.society"/></td>
        <td noWrap="true" align="center"><s:property value="#obj.date"/></td>
        <td noWrap="true" align="center"><s:textfield size="11" name="quantity" value="%{#obj.quantity}"/></td>                 
        <td noWrap="true"><s:property value="#obj.embellisher"/></td>
        <td noWrap="true" align="center"><s:textfield  maxLength="5" size="2" name="boxNumber" value="%{#obj.boxNumber}" /></td>
        <td noWrap="true" align="center"><s:textfield size="11" name="trackingNumber" value="%{#obj.trackingNumber}"/></td>
    </tr>
</s:iterator>
4

1 に答える 1

0

リストにさらに多くのレコードが含まれている場合にも、同様の速度低下に直面しました。その理由は、反復子によって、最終的な jsp クラスの「out.write」ステートメントのログが作成されるためです。

あなたの場合、各反復には 10 個近くの out.write があり、これは両側で & で連結されています。

パフォーマンスを大幅に改善する 1 つの方法は、StringBuilder を使用してサーバー側でテーブルの内容を形成し、タグを使用して最終的な文字列を作成することです (反復子を置き換えます)。

于 2013-02-12T09:02:58.533 に答える