تبلیغات
آموزشASP.NET - افزایش كارآئی برنامه های وب در ASP.NET 2.0 (بخش چهارم)
 
فردا روشن اسن به
آموزشASP.NET
صفحه نخست         تماس با مدیر         پست الکترونیک        RSS         ATOM
 
 
در بخش های اول  و دوم به مجموعه ای از نكات اشاره گردید كه رعایت آنها در زمان طراحی می تواند زمینه پیاده سازی یك برنامه وب كارآ را فراهم نماید . در بخش سوم به امكانات و ابزارهای موجود برای تست برنامه های وب اشاره گردید. در این بخش به بررسی امكانات 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 خواهیم پرداخت .





نوع مطلب :
برچسب ها :
لینک های مرتبط :


دوشنبه 27 شهریور 1396 03:09 ب.ظ
It's fantastic that you are getting ideas from this article
as well as from our discussion made at this time.
سه شنبه 14 شهریور 1396 06:24 ق.ظ
Hurrah! Finally I got a weblog from where I be able to
actually take helpful facts regarding my study and knowledge.
چهارشنبه 1 شهریور 1396 02:33 ب.ظ
Hi! I understand this is kind of off-topic however I needed
to ask. Does managing a well-established blog like
yours take a large amount of work? I'm completely new to running a blog
but I do write in my journal every day. I'd like to start a
blog so I will be able to share my experience and views
online. Please let me know if you have any ideas or tips for
new aspiring blog owners. Appreciate it!
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


درباره وبلاگ

سلام من آرش کاکاوند دانشجوی رشته کامپیوتر هستم و ورود شما رابه دنیای aspخوش امدمیگم.حتما نظر بدین تا من کارم رو بهتر ادامه بدم

مدیر وبلاگ : ارش کاکاوند
مطالب اخیر
نویسندگان
صفحات جانبی
نظرسنجی
شما کدام یک از برنامه های زیر را برای طراحی وب انتخاب می کنید؟








جستجو

آمار وبلاگ
کل بازدید :
بازدید امروز :
بازدید دیروز :
بازدید این ماه :
بازدید ماه قبل :
تعداد نویسندگان :
تعداد کل پست ها :
آخرین بازدید :
آخرین بروز رسانی :