استفاده از Update Panel، معایب و مزایا
  در این مقاله به بحث در مورد استفاده از UpdatePanel و روش های جایگزین می پردازم.
   Ajax
   ۴۰۸۹۶
   این مقاله حاوی فایل ضمیمه نمی باشد
   مرتضی صحراگرد
   ۱۳۸۶/۸/۳۰
ارسال لینک صفحه برای دوستان ارسال لینک صفحه برای دوستان  اضافه کردن به علاقه مندیها اضافه کردن به علاقه مندیها   نسخه قابل چاپ نسخه قابل چاپ

 

با ظهور ASP.NET AJAX، مشاهده مي شود که برنامه نويسان در پروژه هاي خود، همچون نقل ونبات به استفاده از UpdatePanel مي پردازند.

UpdatePanel يکي از ابزار هاي قدرتمند موجود در ASP.NET AJAX مي باشد که باعث شده است که حتي برنامه نويساني که هيچ دانشي در مورد Ajax ندارند، بتوانند پروژه هاي خود را اصطلاحا Ajax Enabled کنند.

متاسفانه عدم شفاف بودن نحوه عملکرد UpdatePanel در پشت صحنه و همچنين آسان بودن استفاده از آن، باعث شده است که به ميزان زيادي از بازدهي و کارايي صفحات وب کاسته شود.

در صورتي که شما هم در پروژه هاي خود به صورت مکرر از UpdatePanel استفاده کرده باشيد، حتما متوجه تاخير در لود صفحات  و پايين آمدن راندمان (Performance) صفحات شده ايد.

اجازه دهيد بحث را با ذکر يک مثال ادامه دهيم.

به قطعه کد هاي زير توجه فرماييد.


<asp:ScriptManager ID="ScriptManager1" runat="server" />
 <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، يک درخواست نامتقارن (Asynchronous) ارسال شده و تاريخ و زمان کليک شدن آن در Label1 نمايش داده مي شود.

اکنون نگاهي به اتفاقاتي که در پشت صحنه افتاده يعني درخواست HTTP Post و جواب (Response) برگشتي خواهيم داشت.

شگفت آور است! براي نمايش يک رشته 22 کاراکتري، مقدار زيادي ديتا ارسال و دريافت شده است.در اين مثال ما فقط تاريخ کليک شدن Button1 را نمايش داده ايم و شما تصور کنيد که در پروژه هاي واقعي، وقتي قرار است عمليات پيچيده اي انجام شود، چه مقدار ديتا ارسال و دريافت مي شود و چه تاثيري در ترافيک شبکه خواهد داشت!

خوشبختانه مايکروسافت راه حل بسيار موثرتري را جهت حل اينگونه مشکلات در اختيار ما نهاده است و آن استفاده از Web Methods مي باشد.

Web Methods :

Web Methods  اجازه مي دهند که صفحات ASP.NET AJAX بتوانند به طور مستقيم متدهاي static را فراخواني نمايند. اين عمل توسط فناوري JSON يعني JavaScript Object Notation انجام مي شود.

JSON يک نسخه کمينه سازي (minimalistic) شده از SOAP مي باشد که جهت ارسال و دريافت ديتاي کم حجم بين کلاينت و سرور، گزينه بسيار عالي مي باشد. جهت اطلاع بيشتراز نحوه پياده سازي Web Methods مي توانيد به اينجا مراجعه نماييد

اکنون مثال بالا را با اين روش پياده سازي خواهيم نمود. به قطعه کد هاي زير توجه فرماييد.


<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();" />

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

خوب اکنون اگر ميزان ديتاي ارسال و دريافت شده را بررسي نماييد، متوجه نکته بسيار جالبي خواهيد شد.

همانطور که مشاهده مي نماييد با JSON ، حجم کل ديتاي مبادله شده حدود 24 بايت مي باشد. در حاليکه با استفاده از UpdatePanel حدود 872 بايت مبادله شده بود!

همانطور که قبل از اين اشاره کردم، در پروژه هاي کاربردي حجم اين ديتا چندين برابر خواهد بود و ميزان بازدهي اين دو روش غير قابل مقايسه خواهد بود.

هنگامي که در صفحه از چندين UpdatePanel استفاده شده باشد، قضيه از اين هم بحراني تر خواهد بود.

البته Web Methods نيز داراي محدوديت هايي مي باشند. به عنوان مثال با توجه به اين که Web Methods به شکل static مي باشند، طبيعتا محدوديت هاي متدهاي static را دارا مي باشند و ضمنا در اين روش ViewState صفحه بروزرساني نمي شود (در حاليکه با استفاده ازUpdatePanel اين عمل انجام مي شود)

در برخي موارد، مانند زماني که از کنترل هايي همچون Wizard و MultiView استفاده مي کنيم، استفاده از UpdatePanel پيشنهاد مي شود زيرا هندل کردن اين کنترل ها با استفاده از Web Methods کاري نه چندان آسان مي باشد.

همانطور که در ابتداي مقاله نيز ذکر شد، UpdatePanel  از ابزارهاي قدرتمند ASP.NET AJAX مي باشد ولي به شرط اين که در محل و مکان مناسب خود استفاده شود.

لذا به برنامه نويسان حرفه اي وب که قصد دارند از ASP.NET AJAX استفاده کنند، پيشنهاد مي شود که به UpdatePanel  به عنوان آخرين راه حل نگاه کنند و نه اولين راه حل!