1

サードパーティのサーバー側コントロールを含む、多くの繰り返しブロックを含むASP.NET 2.0ページがあります(したがって、単なるHTMLではありません)。CPUとRAMの両方の観点から、それぞれの生成にはかなりの費用がかかります。私は現在、これに標準のリピーターコントロールを使用しています。

この単純なアプローチには2つの問題があります。

  1. ページ全体をレンダリングしてからクライアントに返す必要があるため、ユーザーはデータが表示されるまで長時間待つ必要があります。(私はを使用して進行状況メッセージを書くResponse.Writeので、フィードバックはありますが、実際の結果はありません。)
  2. ASP.NETワーカープロセスは、すべてを同時にメモリに保持する必要があります。これには固有のニーズはありません。1つのブロックが処理されると変更されないため、クライアントに返され、メモリが解放される可能性があります。

それぞれが生成されるので、どういうわけかこれらのブロックを一度に1つずつクライアントに返したいと思います。リピーター内のものを別のページに抽出し、AJAXを使用して繰り返し取得することを考えていますが、それにはいくつかの複雑な問題があり、より簡単なアプローチがあるのではないかと思います。理想的には、(クライアントの観点から)1ページとして保持したいのですが、段階的に返します。

別の方法は、同様のことをサーバー上で行うことです。それでも別のページを作成しますが、サーバーにアクセスさせてから、実際のクライアント要求Response.Write()の応答ストリームにHTMLを取得します。ただし、ここでHTTPリクエストを回避する方法はありますか?UserControlまたはPageをHTTPリクエストの外部にレンダリングし、HTMLを文字列として返すだけのASP.NETメソッドはありますか?

これを行う方法についても、他のアイデアを受け入れています。

4

3 に答える 3

1

もう1つの方法は、サーバー上で同様のことを行うことです。別のページを作成しますが、サーバーにアクセスさせてから、実際のクライアント要求の応答ストリームに取得する HTML を Response.Write() にします。

各リピーター行の内容を UserControl に抽出すると、これを行うことができます。次に、 LoadControlメソッドを使用して (必要に応じて) コントロールを動的にロードし、レンダリングする適切なデータを与え (必要に応じて DataBind を呼び出します)、Renderメソッドを使用して応答ストリームにレンダリングします。これは基本的に、まったく新しいリクエストを作成するという混乱を招くことなく、あなたが念頭に置いていたことです。

免責事項: 合計実行時間に関して、これが現在のソリューションよりもパフォーマンスが良いか悪いかはわかりません。

于 2010-05-13T01:42:59.230 に答える
0

この方法では AJAX を使用しません。

<div><script src="pageparts.aspx?partid=news"/></div>
<div><script src="pageparts.aspx?partid=weather"/></div>
<div><script src="pageparts.aspx?partid=email"/></div>

これが機能する方法:pageparts.aspxページの関連部分を構築する JavaScript を発行します。パーツは予測可能な順序では表示されません。パーツのレイアウトを修正して、ページがいっぱいになるときにページが飛び回らないようにすることをお勧めします。

結果は、iGoogle.com のようなものになります (これが、私がこの種の URL を使用した理由です)。

サーバー側のコードは次のようになります。

<asp:Repeater id="rpParts" runat="server">
    <ItemTemplate>
        <div><asp:Literal id="litPart" runat="server"/></div>
    </ItemTemplate>
</asp:Repeater>

<script>コードビハインドでタグを生成します。実際にデータを構築して big 内に配置するすべてのコードdocument.write()は、pageparts.aspx

1 つの大きなデータベース クエリを多数の小さなクエリに分割している場合、これはうまくいかない可能性があります。

編集

全体の問題は「実際にデータを構築するコード」にあります! それを文字列として取得できれば

これは私にはあまり意味がありません。現在、クライアントに何を送信しており、どのように構築していますか?

また、完全を期すために、純粋に非 JavaScript のアプローチを次に示します。

<div><iframe src="part1.aspx"/></div>
<div><iframe src="part2.aspx"/></div>
<div><iframe src="part3.aspx"/></div>

これは醜く、通常はそのように見えますが、データを制御できない場合でも機能します。

于 2010-05-13T02:25:27.833 に答える
0

Web サービスへの ajax 呼び出しを行って、部分的な HTML 結果を取得します。ここで説明する ViewManager を使用して、Web サービスで Web コントロールをレンダリングし、結果の html を返すことができます。

http://weblogs.asp.net/scottgu/archive/2006/10/22/Tip_2F00_Trick_3A00_-Cool-UI-Templating-Technique-to-use-with-ASP.NET-AJAX-for-non_2D00_UpdatePanel-scenarios.aspx

于 2010-05-13T02:28:32.280 に答える