為何ASP.NET AJAX UpdatePanels是危險的

來源:互聯網
上載者:User

[英文原文地址 http://encosia.com/why-aspnet-ajax-updatepanels-are-dangerous/]

[轉載請標明出處 http://blog.csdn.net/donhao/article/details/7218088]

你們如果跟我一樣,無法抗拒的在頁面上放置許多UpdatePanel來證明AJAX的強大性。使用UpdatePanel可以很方便的實現AJAX,甚至無需知道底層是如何?的。

不幸的是,用戶端和伺服器之間互動缺乏透明性,很容易砸到自己的(或者自己的應用)腳。讓我給你舉個例子,應該非常熟悉,如下:

<asp:UpdatePanel runat="server" ID="up1"> <ContentTemplate>   <asp:Label runat="server" ID="Label1" Text="Update Me!" /><br />   <asp:Button runat="server" ID="Button1"      Text="Postback Update" OnClick="Button1_Click" /> </ContentTemplate></asp:UpdatePanel>
protected void Button1_Click(object sender, EventArgs e){  Label1.Text = DateTime.Now.ToLongDateString();}

夠簡單的了,點擊Button1之後,通過一個非同步請求來獲得當前的時間,然後該時間會作為Label1的內容。看起來非常簡單,不過來看一下實際的HTTP的Post和響應是如何完成部分回傳的:

很震驚,對吧?為了顯示22個字元,卻收發了相當多的資料。在不太常使用的功能中問題不大,不過在使用率很高的情況下情況會變糟糕。幸運的是,微軟提供了一種更為高效的方式來實現,其作為ASP.NET AJAX架構的一部分。

頁面方法(Page Method)

頁面方法允許ASP.NET AJAX頁面使用JSON (JavaScript Object Notation)直接執行頁面的靜態方法。JSON可以看作是SOAP的簡化版本,非常適合用戶端和伺服器之間的輕量級通訊。至於如何?頁面方法和JSON,看看微軟的Exposing
Web Services to Client Script in ASP.NET AJAX.

不在通過回傳然後接收HTML標記來替換全部的UpdatePanel中的內容,而是使用Web方法來請求我們只感興趣的資訊:

<asp:ScriptManager ID="ScriptManager1" runat="server"   EnablePageMethods="true" /><script language="javascript"> function UpdateTime() {   PageMethods.GetCurrentDate(OnSucceeded, OnFailed);  }  function OnSucceeded(result, userContext, methodName) {   $get('Label1').innerHTML = result;  }  function OnFailed(error, userContext, methodName) {   $get('Label1').innerHTML = "An error occured."; }</script><asp:Label runat="server" ID="Label1" Text="Update Me!" /><br /><input type="button" id="Button2" value="Web Method Update"   onclick="UpdateTime();" />

public static string GetCurrentDate(){  return DateTime.Now.ToLongDateString();}

通過這種方法,我們完全消除了UpdatePanel的請求中的HTTP POST資料,同時也將響應的資料減少到我們僅感興趣的請求資訊:

使用JSON,整個HTTP一來回為24個位元組,與UpdatePanel中的872個位元組相比,整整提高了4000%,隨著頁面複雜度的增加其效能也會增加。

這不僅僅是顯著地減少了網路頻寬的使用,同時伺服器無需執行個體化UpdatePanel控制項,因此也無需維護其生命週期以將HTML發送回瀏覽器。

UpdatePanel的簡單性是無可厚非的,這正是我們鐘愛UpdatePanel的原因。不過在高負載的情況下,UpdatePanel並不是明智的選擇。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.