2011-01-12 19 views
0

私のWebサイトでajaxを使用して、の「コントロール」にあるNewsFeed.ascxというUserControlから情報を呼び出しています。私の方法は文字列形式を返しますGetRSSReaderと呼ばれる私の場合は機能が含まれている(WebMethodのというフォルダ内)Webサービスページ:ajax、asp.netを使用してページデータを読み込み

[WebMethod] 
public string GetRSSReader() 
{ 
    Page page = new Page(); 
    UserControl ctl = 
     (UserControl)page.LoadControl("~/Controls/NewsFeed.ascx"); 

    page.Controls.Add(ctl); 

    StringWriter writer = new StringWriter(); 
    HttpContext.Current.Server.Execute(page, writer, false); 

    return writer.ToString(); 
} 

その後、私はそれがあまりにも重い見つけた(jqueryのを使用してこのページを呼び出します)返されたデータをJSONのように取得する:

<div id="Content"></div> 
<script type="text/javascript" defer="defer" src="../JAVA/Default.js"></script> 
>

$(document).ready(Update); 

function Requests() 
{ 
    $.ajax({ 
    type: "POST", 
    url: "../WebMethods/Feed.asmx/GetRSSReader", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     $('#Content').html(msg.d); 
    } 
    }); 
} 

Jquery.jsとこのページ(にDefault.js)私の質問


のJavaフォルダに設立された:より良いものがありますこの方法より。私は膨大な量のデータを持っていても動作しませんし、グリッドビューツールも読みません。助言がありますか !? 10x


別の形でWebサービスの代替手段がありますか! (高速)

答えて

1

Webサービスのオーバーヘッドではなく、膨大な量のデータが問題のように聞こえるかもしれません。

ニュースフィードの内容全体を返信していますか?むしろ、変わったものを返すのではないでしょうか?いくつかのロジックが答えのようです...

また、これを行うためにWebサービスを使用する本当の理由はありません。 UserControlを通常のページ(aspx)に置き、GETクエリで呼び出すだけです。オーバーヘッドの少ないWebServiceではなく、汎用Webハンドラ(ashx)を使用することもできます。しかし、もう一度それは本当にここの問題であるようには聞こえません。いずれにせよ、JSONを気にする必要はありません。 HTMLを入手して入手してそのまま使用しています。

また、完全にレンダリングされたHTMLを返す代わりに(UserControlが何をしているかわからず、これを最適化する方法を知りにくい)、データを返し、jQueryなどを使用して出力を生成します。 jQueryでテンプレートを構築したくない場合は、サーバー上にデフォルト/空のテンプレートをレンダリングし、クライアントでこれを使用してデータを構築します。

これはもちろんのことですが、データ量がボトルネックになっていると、それが役に立ちます。

+0

私の方法は十分に軽いことを理解することができます! – Rawhi

+0

あなたは何を意味するのか分かりません...ボトルネックはどこですか?単一のユーザーでテストしているだけで、速度が遅すぎると、明らかにデータ量が問題になります。サーバーの負荷が大きい場合を除き、Webサービスのオーバーヘッドに気づくことはありません。 –

0

一般に、WCFはWebサービスよりも新しい、高速で優れています。

は、しかし、あなたのケースで私は非常にあなたがそれらのいずれかを必要と疑う..私はあなたの要件を理解している場合、あなたは、このためにUpdatePanelを使用することができます。.. UpdatePanelでコントロールをラップし、クライアント側のスクリプトでそれをトリガーする代わりに、独自のAJAXリクエストを呼び出します。

UpdatePanelは、独自のAJAXメカニズムをバックグラウンドで使用しています。できるだけ最適化されていると思います。

+0

UpdatePanelを使用した場合の唯一の問題はパフォーマンスです。要求には、ビューステートを含む従来のASP.NETポストバックのすべてが含まれています – Rawhi

0

非常に軽量で、JSONも送信できるASP.NETコールバックAPIを使用できます。

とにかく、あなたの方法が効率的ではないと言う理由は何ですか?このWebサービスを通じて多くのデータを送信していますか?

多分ページングが必要です。

+0

効率的ではありませんが、GridViewツールをサポートしていないとは言いませんでした。そしてthje ASP.NETコールバックAPIはどうですか? – Rawhi

+0

グリッドビューについてはどこで話していますか?そして私はコールバックAPIであなたの感嘆を理解していません –

関連する問題