افزايش كارآئی برنامه های وب در 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 (بخش چهارم)

 مديريت وب

8481

7

3.6

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

 

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

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

مفاهيم اوليه Caching
Caching از جمله واژه های كاملا" آشنا در عرصه فناوری اطلاعات و ارتباطات است . اين واژه ريشه فرانسوی‌ دارد و به معنی ذخيره سازی است . در دنيای پردازش اطلاعات ، به ذخيره اطلاعات برای استفاده آتی اطلاق می گردد .در واقع ، Caching فرآيندی است كه بر اساس آن داده با فركانس استفاده بالا به منظور پاسخ به درخواست های بعدی ذخيره می گردد. اطلاعات ذخيره شده ممكن است در آينده مجددا" استفاده گردند و يا اين احتمال وجود خواهد داشت كه هرگز شرايط استفاده مجدد از آنها فراهم نگردد .  بنابراين Cache صرفا" زمانی مفيد خواهد بود  كه هزينه ذخيره اطلاعات كمتر از هزينه بازيابی و يا محاسبه مجدد آنها باشد .
امروزه از مفهوم Caching در زمينه های متعددی در سيستم های كامپيوتری و شبكه ای استفاده می گردد . پردازنده های كامپيوتر دارای cache اختصاصی برای داده و دستورالعمل ها می باشند . سيستم های عامل دارای بافرهای cache برای سيستم های فايل و درايوها می باشند . سيستم های فايل توزيع شده ( شبكه ای ) نظير NFS ( برگرفته شده از network file system )  و AFS ( برگرفته شده از  Andrew File System ) برای بهبود كارآئی خود از cache استفاده می نمايند . روترهای بكارگرفته شده در ستون فقرات شبكه اينترنت مسيرهائی را كه اخيرا" از آنها استفاده كرده اند ، cache می نمايند . سرويس دهندگان  DNS  ، ماحصل فرآيند ترجمه نام به آدرس را جهت استفاد آتی cache می نمايند .
برنامه های كامپيوتری خصوصا" برنامه های وب نيز از اين فناوری در ابعاد گسترده ای استفاده می نمايند تا بتوانند با سرعت بيشتر پاسخگوی نياز كاربران و مخاطبان خود باشند . به عنوان نمونه ، مرورگر با ارائه پتانسل های لازم سمت سرويس گيرنده امكان caching متن و يا تصاوير را فر اهم می نمايد و در سمت سرويس دهنده با استفاده از امكانات متعددی می توان بهترين گزينه caching را به منظور افزايش كارائی انتخاب كرد.
در صورتی كه از روش هائی مناسب به منظور پياده سازی سيستم Caching در برنامه های كامپيوتری استفاده گردد ، كارائی و توانمندی آنها در جهت ارائه خدمات به كاربران بطرز محسوسی افزايش خواهد يافت .
 

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

  • Output caching  ، ساده ترين روش caching است .  صفحات aspx . بر اساس فرآيندی در سمت سرويس دهنده ترجمه و پس از اجراء ، ماحصل خروجی آنها به صورت يك صفحه html برای سرويس گيرنده ارسال می گردد . در اين روش يك نسخه نهائی از صفحه ترجمه شده html  كه برای سرويس گيرنده ارسال شده است ، cache می گردد . بدين ترتيب ، زمانی كه سرويس گيرنده بعدی درخواست خود برای استفاده از اين صفحه را برای سرويس دهنده ارسال می نمايد ،  در مقابل اجرای صفحه و توليد خروجی لازم ( انجام پردازش های سمت سرويس دهنده با توجه به ماهيت و جايگاه عملكردی يك صفحه در يك برنامه وب )  ، صفحه ترجمه شده html بطور اتوماتيك برای وی ارسال می گردد . بدين ترتيب ، مدت زمانی كه لازم است صفحه به همراه كد درون آن ترجمه و اجراء گردد بطور كامل حذف می گردد .

  • Data caching : برای استفاده از اين روش می بايست بطور دستی و از طريق كد شرايط آن را فراهم نمود . پياده كنندگان می توانند بخش های مهمی از اطلاعات را كه زمان زيادی صرف ساختن آنها شده است ( نظير يك DataSet بازيابی شده از يك بانك اطلاعاتی ) را در cache ذخيره نمايند . در ادامه ، ساير صفحات می توانند وجود اين اطلاعات را بررسی و در صورت موجود بودن در cache  از آنها استفاده نمايند . بدين ترتيب ، مراحل مورد نياز برای بازيابی اطلاعات حذف خواهد شد .
    روش فوق از لحاظ مفهومی شباهت زيادی به استفاده از application state دارد ولی دارای قابليت های بيشتری در سمت سرويس دهنده است . به عنوان نمونه زمانی كه حجم داده بگونه ای زياد گردد كه كارآئی يك برنامه را تحت تاثير قرار دهد ، آيتم های موجود در cache بطور اتوماتيك از cache حذف خواهند شد . برای ذخيره آيتم ها در cache می توان يك تاريخ را مشخص تا پس از سپری شدن زمان مورد نظر بطور اتوماتيك از حافظه حذف گردند .

علاوه بر روش های كلی فوق ، دو نوع خاص ديگر از caching بر اساس مدل های اشاره شده نيز ايجاد شده است :

  • Fragment caching : روش فوق نوع خاصی از output caching است و در مقابل caching كد Html برای تمامی صفحه ، صرفا" بخش هائی خاص از كد cache می گردد. در اين روش خروجی كد ترجمه شده Html مربوط به يك كنترل كاربر بر روی يك صفحه ذخيره می گردد . بدين ترتيب در صورت اجراء مجدد صفحه ، كد موجود در صفحه اجراء‌ می گردد و ضرورتی به  اجراء كد مرتبط با كنترل كاربر نخواهد بود .

  • Data source caching : اين نوع caching بر اساس كنترل های منبع داده ايجاد و شامل كنترل های منبع داده ObjectDataSource ، SqlDataSource و XmlDataSource می باشد. از لحاظ فنی ، در روش فوق از data caching استفاده می گردد. تنها تفاوت موجود در اين رابطه ، عدم نياز به انجام پردازش های مورد نياز توسط پياده كننده است . بدين منظور لازم است كه برخی خصلت ها و پيام های كنترل منبع داده كه مسئوليت ذخيره و بازيابی caching را برعهده دارند ،‌ توسط پياده كنندگان پيكربندی گردد.

در اين بخش و ساير بخش های بعدی به ترتيب به بررسی موارد زير خواهيم پرداخت :

  • output caching 
  • data caching
  • caching در كنترل های منبع داده
  • SQL cache dependency

نحوه استفاده از output caching
با استفاده از output caching ، نسخه نهائی كد ترجمه شده Html صفحه cache می گردد . زمانی كه صفحه مجددا" و توسط كاربر ديگر درخواست می گردد ، اشياء ايجاد نخواهند شد . همچنين ، چرخه حيات صفحه آغاز نخواهد شد و هيچگونه كدی اجراء نمی گردد . در مقابل ، كد cache شده در اختيار متقاضيان بعدی قرار داده می شود . با توجه به اين كه در روش  output caching  هزينه های بالا سری كد ( پردازش های اضافه )  حذف می گردد ، كارآئی برنامه بطرز محسوسی افزايش خواهد يافت .
برای آشنائی با نحوه عملكرد output caching ، كد زير را كه زمان و تاريخ جاری سيستم را در خروجی نشان می دهد ، بررسی می نمائيم .

 <%@ OutputCache Duration="20" VaryByParam="None" %>
<script runat="server">
  sub Page_Load(sender as Object, e as EventArgs)
    lblDate.Text = "The time is now:<br />"
    lblDate.Text &= DateTime.Now.ToString()
  end sub
</script>
<asp:Label id="lblDate" runat="server" />

متداولترين روش caching يك صفحه ASP.NET  ، درج دايركتيو OutputCache در ابتدای فايل aspx . است . كد  زير نحوه استفاده از دايركتيو فوق را نشان می دهد :

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

در دايركتيو فوق از دو خصلت Duration و  VaryByParam  استفاده شده است . خصلت Duration به  ASP.NET اعلام می نمايد كه صفحه را به مدت 20 ثانيه cache نمايد. خصلت VaryByParam  ميزان وابستگی فرآيند caching را به يك و يا چندين پارامتر مشخص می نمايد . در برخی موارد ممكن است اين وابستگی مهم نباشد و مقدار آن None در نظر گرفته شود ( همانند مثال فوق ) .
پس از ذخيره كد فوق در فايلی با نام CacheExample1.aspx و اجراء آن ، نتايج جالب و قابل توجه ای را مشاهده خواهيم كرد . اولين مرتبه ای كه صفحه درخواست می گردد ، تاريخ و زمان جاری در خروجی نمايش داده می شود .در صورتی كه پس از گذشت مدت زمان بسيار كوتاهی صفحه را refresh نمائيم ، خروجی صفحه بهنگام نخواهد شد . در مقابل ، ASP.NET بطور اتوماتيك خروجی نسخه cache شده را ارسال خواهد كرد . وضعيت فوق به مدت 20 ثانيه ادامه خواهد يافت  و پس از اتمام تاريخ مصرف نسخه cache شده ، ASP.NET مجددا" كد صفحه را اجراء و يك نسخه جديد cache را ايجاد و از آن به مدت 20 ثانيه ديگر استفاده خواهد كرد .
شايد بنظر 20 ثانيه زمان زيادی نباشد ولی برای سايتی كه حاوی اطلاعات گسترده ای جهت ارائه به كاربران متعدد است ، اين موضوع می تواند كاملا" متفاوت باشد. به عنوان نمونه ، فرض كنيد می خواهيم ليستی از محصولات قابل عرضه به كاربران را در يك صفحه نمايش دهيم . با caching صفحه به مدت 20 ثانيه ، دستيابی به بانك اطلاعاتی محدود به سه عمليات در يك دقيقه می گردد . بدون caching ، برای هر كاربری كه متقاضی مشاهده ليست محصولات است ، می بايست فرآيند ارتباط با بانك اطلاعاتی و نمايش محصولات در يك ساختار نمايشی مناسب ( نظير Gridview ) انجام شود . بديهی است با caching صفحه به مدت 20 ثانيه امكان پاسخگوئی به ده ها درخواست در مدت زمان فوق و بدون نياز به دنبال كردن فرآيند ارتباط با بانك اطلاعاتی و نمايش داده انجام می شود .
توجه داشته باشيد كه اگر مدت زمان حضور يك نسخه cache  در حافظه 20 ثانيه تعيين شده باشد ، اين بدان معنی نخواهد بود كه واقعا" در طی مدت زمان فوق نسخه cache شده در حافظه وجود خواهد داشت . صفحه مورد نظر ممكن است در اولين فرصتی كه سيستم  به منظور انجام كارهای اساسی تر خود با كمبود حافظه مواجه شود از آن خارج گردد . بدين ترتيب ، پياده كنندگان می توانند با خيالی آسوده  از cache  استفاده نمايند بدون اين كه نگران تاخير در اجرای برنامه به دليل استفاده از عنصر حياتی حافظه توسط cache باشند.
زمانی كه يك صفحه cache شده مجددا" ترجمه می گردد ، ASP.NET بطور اتوماتيك صفحه را از cache خارج می نمايد . بدين ترتيب از بروز مسائلی نظير عدم وجود نسخه بهنگام شده در cache ممانعت بعمل می آيد .
در زمان تست برنامه بهتر است كه caching غير فعال گردد . در زمان استفاده از روش ها و تكنيك های اشكال زدائی نظير  متغيرهای watch  و يا ايجاد نقاط  breakpoint ممكن است با مشكلاتی‌ مواجه شويم . در چنين مواردی در صورتی كه يك نسخه cache شده از صفحه در دسترس باشد ، كد مرتبط با آن در زمان اشكال زدائی اجراء نخواهد شد .

Caching سمت سرويس گيرنده
يكی ديگر از گزينه ها ، cache صفحه در سمت سرويس گيرنده است . در اين روش ، مرورگر نسخه ای از صفحه را ذخيره و بطور اتوماتيك از آن در مواردی كه دكمه back مرورگر كليك و يا آدرس URL صفحه مجددا" تايپ شود، استفاده می نمايد . در صورتی كه كاربر دكمه Refresh را فعال نمايد ، از نسخه cache شده صرفنظر  و صفحه مجددا" از سرويس دهنده درخواست می گردد .
برای cache يك صفحه در سمت سرويس گيرنده از خصلت Location در دايركتيو OutputCache  استفاده می گردد . مقدار پيش فرض اين خصلت server است و می تواند مقادير ديگر نظير Client ، None و Any را به آن نسبت داد .

 <%@ OutputCache Duration="20" VaryByParam="None" Location="Client" %>

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



جستجو

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


 

 

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



              

 

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