افزايش كارآئی برنامه های وب در ASP.NET 2.0 New Page 1



ساير




 

 

 

SAKHA RAVESH CO.

 ا مروز

 سه شنبه  28  دی  1395  2017  Jan.  17   Tuesday ToDay
صفحه اصلی  مقالات نکته هادايره المعارف خودآموزها | تازه ها خود آزمون ها    
  نسخه قابل چاپ  

    5 4 3 2 1 

 عنوان

 نويسنده

  مشاهده

 تعداد آراء

 امتياز

 افزايش كارآئی برنامه های وب در ASP.NET 2.0 (بخش پنجم)

 مديريت وب

8240

3

4.7

با توجه به جایگاه داده در عصر حاضر و  لزوم نگاه جامع به این مقوله مهم ، بر آن شدیم تا محوریت فعالیت های خود را بر  روی این موضوع متمرکز نمائیم . از این رو گروه فابک با شعار فناوری اطلاعات برای کسب وکار شکل گرفت و  خدمات خود  را از طریق  سایت www.fabak.ir  به مخاطبان محترم عرضه می نماید

 

افزايش كارآيی برنامه های وب در ASP.NET 2.0

افزايش كارآئی برنامه های وب در ASP.NET 2.0 (بخش پنجم)
آنچه تاكنون گفته شده است :

  • بخش های اول  و دوم  : اشاره به مجموعه ای از نكات كه رعايت آنها در زمان طراحی می تواند زمينه پياده سازی يك برنامه وب كارآ را فراهم نمايد .
  • بخش سوم  : معرفی برخی ابزارها برای تست برنامه های وب
  • بخش چهارم : مفاهيم اوليه caching ، روش های caching در ASP.NET ، نحوه استفاده از output caching

در اين بخش بحث خود را در ارتباط با  output caching ادامه داده و بر روی  Caching و Query string  متمركز خواهيم شد.

Caching و Query string
يكی از نكات مهم در خصوص caching ، تصميم در خصوص زمان استفاده مجدد از صفحه و صحت اطلاعات است . اغلب پياده كنندگان تمايل زيادی در ارائه اطلاعات به صورت بلادرنگ دارند و كمتر در انديشه استفاده بهينه از سيستم caching می باشند . پياده كنندگان می توانند بدون نگرانی در موارد متعددی از caching استفاده نمايند تا كارآئی برنامه های  وب را افزايش دهند .
در مواردی كه اطلاعات به صورت پويا توليد می گردد وضعيت caching و يا استراتژی ايجاد و بكارگيری مجدد آن تا اندازه ای متفاوت خواهد بود . به عنوان نمونه ، در صورتی كه در صفحه ای از session كاربر جاری استفاده می شود تا بر اساس آن رابط كاربر سازماندهی گردد ، caching تمام صفحه مناسب نخواهد بود چراكه يك صفحه مشابه نمی تواند برای ساير كاربران مفيد و قابل استفاده مجدد باشد . يك نمونه ديگر ، صفحه ای است كه اطلاعات دريافتی خود را از يك صفحه ديگر و از طريق query string دريافت می نمايد . در چنين مواردی صفحه به صورت پويا ايجاد و برای  caching آن می بايست از راهكارهائی ديگر استفاده گردد.
در مثال اشاره شده در بخش چهارم  به خصلت VaryByParam دايركتيو OutputCache ، مقدار None نسبت داده شده بود . بدين ترتيب به ASP. NET اعلام شده است كه صرفا" يك نسخه از صفحه را  cache نمايد تا بتوان از آن در تمامی حالات استفاده مجدد نمود . در چنين مواردی اگر درخواست صفحه به همراه اضافه كردن آرگومان های query string به URL باشد ، صرفا" از همان يك نسخه cache شده بدون توجه به مقدار آرگومان های دريافتی استفاده می گردد ( تا زمانی كه تاريخ مصرف نسخه cache شده به اتمام نرسيده باشد ) .  شما می توانيد اين موضوع را با اضافه كردن يك آرگومان query string بطور دستی در مرورگر انجام دهيد . مثلا" سعی كنيد صفحه  را با افزودن  a=b ?  در انتهای URL اجراء نمائيد. مشاهده خواهيد كرد كه خروجی cache شده همچنان يكسان خواهد بود .
با توجه به نتايج فوق ممكن است اينگونه برداشت شود كه output caching برای صفحه ای كه از آرگومان های query string استفاده می نمايد ، مناسب نباشد . در اين رابطه ASP.NET يك راه حل ديگر را ارائه نموده است . در چنين مواردی می توان خصلت VaryByParam را "*" در نظر گرفت تا مشخص گردد كه صفحه از query string استفاده می نمايد و به ASP.NET اعلام گردد كه نسخه های cache مجزاء را برای مقادير مختلف آرگومان query string ذخيره نمايد .

 <%@ OutputCache Duration="20" VaryByParam="*" %>

بدين ترتيب زمانی كه صفحه به همراه اطلاعات query string  درخواست شود ، در ابتدا ASP.NET مقدار query string را بررسی می نمايد . در صورتی كه رشته دريافتی با درخواست قبلی مطابقت نمايد و يك نسخه cache شده از صفحه موجود باشد ، از آن استفاده خواهد كرد . در غير اينصورت يك نسخه جديد از صفحه ايجاد و بطور جداگانه cache می گردد .
برای آشنائی بهتر با نحوه عملكرد فرآيند فوق ، فرض كنيد مجموعه ای از درخواست ها به ترتيب زير دريافت گردد:

  • كاربری صفحه ای را بدون پارامتر query string درخواست و نسخه A صفحه را دريافت می نمايد .

  • كاربری صفحه را با پارامتر ProductID=1 درخواست و نسخه B صفحه را دريافت می نمايد .

  • كاربر ديگر صفحه را با پارامتر ProductID=2 درخواست و نسخه C صفحه را دريافت می نمايد .

  • كاربر ديگر صفحه را با پارامتر ProductID=1 درخواست می نمايد . در صورتی كه تاريخ اعتبار نسخه B كه قبلا" cache شده است به اتمام نرسيده باشد ، اين نسخه برای وی ارسال می گردد.

  • كاربر ديگر صفحه را بدون پارامتر درخواست می نمايد .  در صورتی كه تاريخ اعتبار نسخه A كه قبلا" cache شده است به اتمام نرسيده باشد ، اين نسخه برای وی ارسال می گردد.

برای تست فوق و دريافت نتايج بهتر می توان مدت زمان اعتبار نسخه cache شده را زياد كرد .
در صورتی كه صفحه ای صرفا" در ارتباط با داده سمت سرويس دهنده  ( نظير داده موجود در يك بانك اطلاعاتی )  و يا داده موجود در query string باشد ،‌ بدون نگرانی می توان از روش output caching استفاده كرد .
در صورتی كه خروجی صفحه وابسته به اطلاعات خاص و مرتبط با كاربر نظير داده session و يا كوكی باشد ، از روش output caching نمی توان استفاده نمود چراكه مكانيزمی وجود ندارد كه بر اساس آن بتوان تفاوت caching را بر اساس session و يا كوكی تشخيص داد. output caching همچنين با صفحات پويائی كه محتويات خود را در پاسخ به رويدادهای مرتبط با كنترل ها تغيير می دهند كار نمی كند . در چنين مواردی ، می توان از fragment caching برای caching يك بخش خاص از صفحه و يا از data caching برای caching اطلاعات خاص استفاده كرد.

caching با پارامترهائی خاص
بندرت مقدار  VaryByParam معادل  "*" در نظر گرفته می شود و در اكثر موارد بهتر است كه يك متغير query string مهم را با نام مشخص كرد . كد زير نحوه انجام اين كار را نشان می دهد.

 <%@ OutputCache Duration="20" VaryByParam="ProductID" %>

در چنين مواردی ، ASP.NET مقدار query string را بررسی و به دنبال پارامتر ProductID می گردد . درخواست هائی با پارامترهای مختلف ProductID بطور جداگانه cache  و از ساير پارامترها صرفنظر خواهد شد .
در صورت لزوم می توان چندين پارامتر را كه توسط semicolon از يكديگر جدا شده اند به خصلت VaryByParam نسبت داد . كد زير نحوه انجام اين كار را نشان می دهد .

 <%@ OutputCache Duration="20" VaryByParam="ProductID;CurrencyType" %>

در چنين مواردی ، ASP.NET نسخه هائی جداگانه از صفحه را با توجه به مقادير متفاوت ارائه شده توسط ProductID و CurrencyType در  cache نگهداری خواهد كرد .

مثال : Caching چندين نسخه جداگانه از يك صفحه
در اين مثال از دو صفحه برای نشان دادن نحوه caching چندين نسخه جداگانه از يك صفحه وب استفاده شده است . اولين صفحه با نام QueryStringSender.aspx كه خود cache نمی گردد و در آن سه دكمه مطابق شكل 1 ارائه می گردد :

 ايجاد سه دكمه برای تست caching چند نسخه جداگانه از يك صفحه
شكل 1 : ايجاد سه دكمه برای تست caching چندين نسخه جداگانه از يك صفحه بر اساس مقدار پارامتر Version

صفحه QueryStringSender.aspx

<%@ Page Language="VB" Culture="fa-IR" UICulture="fa-IR" %>
<Script Runat="Server">
  Protected Sub AnyButton_Click(ByVal sender As Object,ByVal e As System.EventArgs )
    Response.Redirect("QueryStringRecipient.aspx" &"?Version=" & CType(sender, Control).ID)
  End Sub
</Script>
<html dir="rtl">
<head >
<title>Caching Test</title>
</head>
<body style="font-family: Tahoma;">
  <form id="form1" runat="server">
    <div>
     <asp:Button ID="cmd1" runat="server" Text="نسخه شماره يك"
                        OnClick="AnyButton_Click" Width="133px" Font-Names="Tahoma" />
                       <br /><br />
     <asp:Button ID="cmd2" runat="server" Text="نسخه شماره دو"
                        OnClick="AnyButton_Click" Width="133px" Font-Names="Tahoma" />
                       <br /><br />
    <asp:Button ID="cmd3" runat="server" Text="نسخه شماره سه"
                       OnClick="AnyButton_Click" Width="133px" Font-Names="Tahoma" />
  </div>
  </form>
</body>
</html>

يك event handler ( با نام AnyButton_Click  )  پس از كليك بر روی هر يك از سه دكمه موجود در صفحه فعال می گردد . در روتين فوق پس از تشخيص اين كه بر روی كدام دكمه ( cmd2 ، cmd1 و cmd3 )  كليك شده است ، مقدار آن استخراج و به پارامتر  Version نسبت داده می شود و در نهايت كاربر به صفحه QueryStringRecipient.aspx  هدايت می گردد .
صفحه مقصد ( QueryStringRecipient.aspx ) يك پيام را متناسب با مقدار پارامتر Version در خروجی نمايش می دهد . در صفحه فوق مقدار خصلت VaryByParam  دايركتيو  OutputCache معادل Version در نظر گرفته شده است.
(صفحه فوق به دنبال يك پارامتر query string با نام Version  جهت ايجاد نسخه های جداگانه cache می گردد ) .

 <%@ OutputCache Duration="20" VaryByParam="Version" %>

در صفحه QueryStringRecipient.aspx  با توجه به مقدار پارامتر Version ، تاريخ و زمان جاری بر اساس يك فرمت خاص در خروجی نمايش و يك نسخه از آن نيز cache می گردد . 

صفحه QueryStringRecipient.aspx

<%@ Page Language="VB" Culture="fa-IR" UICulture="fa-IR" %>
<%@ OutputCache Duration="30" VaryByParam="Version" %>

<Script Runat="Server">
  Sub page_load ( )
   lblDate.Text = "زمان و تاريخ جاری:<br />" & DateTime.Now.ToString()
   Select Case Request.QueryString("Version")
    Case "cmd1"
       lblDate.Font.Size = FontUnit.XLarge
    Case "cmd2"
      lblDate.Font.Size = FontUnit.Large
    Case "cmd3"
      lblDate.Font.Size = FontUnit.Small
   End Select
 End Sub
</Script >

<html dir="rtl">
<head id="Head1" runat="server">
<title>Cache test</title>
</head>
 <body style="font-family: Tahoma;">
   <form id="form1" runat="server">
     <div>
          <asp:Label id="lblDate" runat="server" Font-Size="X-Large" Font-Bold="True"
                            EnableViewState="False"></asp:Label>
    </div>
  </form>
</body>
</html>

بدين ترتيب سه خروجی جداگانه Html ايجاد و با توجه به مدت زمان مشخص شده توسط خصلت Duration دايركتيو  OutputCache  جهت استفاده آتی cache می گردند .
در مثال فوق برای تشخيص تفاوت بين سه نسخه متفاوت صرفا" اندازه فونت تغيير داده شده است . خروجی برنامه فوق در شكل 2 نشان داده شده است .

ايجاد سه نسخه cache جداگانه با توجه به مقدار پارامتر Version
شكل 2 : ايجاد سه نسخه cache جداگانه با توجه به مقدار پارامتر Version

 در بخش ششم به بررسی ساير روش های موجود برای output caching خواهيم پرداخت .



جستجو

مقالات                 
دايره المعارف       
دوره های آموزشی


 

 

مشاهده گروه ها



              

 

 تهيه شده در شرکت سخا روش -  1382