تبلیغات
آموزشASP.NET - افزایش كارآئی برنامه های وب در ASP.NET 2.0 (بخش ششم)
 
فردا روشن اسن به
آموزشASP.NET
صفحه نخست         تماس با مدیر         پست الکترونیک        RSS         ATOM
 
 

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

Custom Caching Control
برای ذخیره چندین نسخه cache از یك صفحه تنها گزینه موجود استفاده از پارامترهای query string نمی باشد . ASP.NET به پیاده كنندگان برنامه های وب امكان ایجاد رویه هائی سفارشی را می دهد كه به كمك آنها می توان در خصوص caching یك نسخه جدید از یك صفحه و یا استفاده از نسخه موجود تصمیم گیری كرد .
كد نوشته شده در هر یك از رویه های فوق مناسب بودن اطلاعات را بررسی و یك رشته را برمی گرداند . در ادامه ، ASP.NET از رشته فوق برای پیاده سازی caching استفاده می نماید. در صورتی كه كد مورد نظر رشته مشابهی را برای درخواست های مختلف تولید نماید ، ASP.NET  از نسخه cache شده صفحه استفاده خواهد كرد و در صورتی كه كد فوق یك مقدار جدید را تولید نماید ، ASP.NET یك نسخه جدید cache را ایجاد و آن را بطور جداگانه ذخیره می نماید .
به عنوان نمونه فرض كنید قصد داریم نسخه های مختلفی از یك صفحه را بر اساس نوع مرورگر cache نمائیم . بدین منظور در ابتدا از دایركتیو OutputCache در ابتدای صفحاتی كه قصد caching آنها را داریم استفاده كرده و در ادامه از خصلت VaryByCustom برای مشخص كردن یك نام كه نوع caching سفارشی را مشخص می نماید ، استفاده می نمائیم .

با توجه به این كه قصد داریم صفحات بر اساس مرورگر كاربران cache نمائیم ، در نمونه كد زیر از نام  Browser استفاده شده است .

<%@ OutputCache Duration="10" VaryByParam="None" VaryByCustom="Browser" %>

در ادامه نیاز داریم رویه ای را كه رشته سفارشی caching را تولید می نماید ، ایجاد نمائیم . رویه فوق می بایست در فایل پیكربندی global.asax و یا فایل code-behind مربوطه باشد .
كد زیر نحوه انجام این كار را نشان می دهد .

رویه ای برای ایجاد سفارشی چندین نسخه cache از یك صفحه

Function GetVaryByCustomString(ByVal context As HttpContext, ByVal arg As String) As String

 If arg = "Browser"
    Dim BrowserName As String
    BrowserName = Context.Request.Browser.Browser
    Return BrowserName
 Else
    Return MyBase.GetVaryByCustomString(context, arg)
 End If
End Function

 

تابع GetVaryByCustomString یك رشته با مقدار VaryByCustom را از طریق پارامتر arg دریافت می نماید . بدین ترتیب می توان برنامه ای را پیاده سازی نمود كه چندین نوع از caching سفارشی را صرفا" در یك تابع مشابه پیاده سازی نماید . هر نوع از یك  نام VaryByCustom مختلف استفاده می نماید ( نظیر Browser ، BrowserVersion و یا DayOfWeek ) . تابع فوق مقدار  VaryByCustom را از طریق آرگومان arg مشاهده و رشته caching مناسب را برمی گرداند . در صورتی كه رشته های caching برای درخواست های مختلف مطابقت نماید ، ASP.NET از نسخه cache شده صفحه استفاده می نماید. در غیر اینصورت ASP.NET برای هر رشته caching یك نسخه جداگانه را ایجاد ، ذخیره و cache می نماید .
دایركتیو OutputCache دارای یك خصلت سوم است كه از آن برای تعریف caching استفاده می گردد . خصلت فوق كه VaryByHeader نام دارد ، به شما اجازه می دهد كه نسخه هائی جداگانه از یك صفحه را بر اساس مقدار دریافتی یك  HTTP header  ذخیره نمائید . در این رابطه می توان صرفا" یك header و یا مجموعه ای header كه توسط semicolon از یكدیگر جدا شده اند را مشخص نمود . سایت های چند زبانی می توانند از روش فوق برای caching چندین نسخه از یك صفحه بر اساس زبان مرورگر سرویس گیرنده استفاده نمایند .
كد زیر نحوه استفاده از خصلت VaryByHeader را نشان می دهد .

 <%@ OutputCache Duration="20" VaryByParam="None" VaryByHeader="Accept-Language" %>

Fragment Caching
در برخی موارد ممكن است نتوان تمامی یك صفحه را cache نمود ولی همچنان اصرار داریم كه بخشی از صفحه را كه بندرت تغییر می یابد ( نظیر لیست كالاهای موجود ) و هزینه زیادی صرف ایجاد آن شده است را cache نمائیم . در چنین مواردی می توان از روش های متعددی نظیر data caching ( در بخش بعد این مقاله با روش استفاده از آنها آشنا خواهیم شد ) و fragment Caching استفاده كرد .
برای پیاده سازی fragment Caching می بایست برای بخشی از صفحه كه قصد caching آن را داریم یك كنترل كاربر را ایجاد و دایركتیو OutputCache را به آن اضافه كرد . بدین ترتیب علی رغم این كه صفحه cache  نخواهد شد ولی كنترل كاربر cache می گردد .
fragment Caching از لحاظ مفهومی مشابه caching یك صفحه است  و صرفا" دارای یك تفاوت اساسی است . در صورتی كه صفحه یك نسخه cache شده از یك كنترل كاربر را بازیابی نماید ، نمی تواند با آن و از طریق كد ارتباط برقرار نماید . به عنوان نمونه در صورتی كه كنترل كاربر خصلت هائی خاص را ارائه می نماید ، صفحه وب مورد نظر نمی تواند به این خصلت ها دستیابی و آنها را تغییر دهد . توجه داشته باشید ، زمانی كه از یك نسخه cache شده كنترل كاربر استفاده می گردد ، یك بلاك از تگ های Html درون صفحه قرار خواهند گرفت و در عمل شی كنترل كاربر در دسترس نخواهد بود . 
 

Cache Profiles
یكی از مسائل در ارتباط با output caching قرار دادن كد درون صفحه است ( در بخش   aspx markup . و یا در بخش كد كلاس ) . با این كه استفاده و پیكربندی خصلت های مرتبط با دایركتیو OutputCache در صفحات وب ساده تر بنظر می آید ولی این روش می تواند مسائل مدیریتی و پشتیبانی مختص به خود را نیز به دنبال داشته باشد (خصوصا"  اگر ده ها صفحه cache شده ایجاد شده باشد ) . به عنوان نمونه در صورتی كه قصد داشته باشیم تغییراتی را در خصوص caching تمامی صفحات فوق انجام دهیم ( مثلا" تغییر مدت زمان caching از 30 ثانیه به 60 ثانیه ) ، می بایست هر صفحه بطور جداگانه تغییر  و در ادامه نیز توسط ASP.NET مجددا" ترجمه گردند .   
در ASP.NET 2.0 با معرفی یك راهكار جدید این امكان در اختیار پیاده كنندگان گذاشته شده است تا بتوانند از تنظیمات caching مشابه برای گروهی از صفحات استفاده نمایند . به ویژگی فوق cache profile می گویند و به كمك آن می توان تنظیمات caching را در یك فایل web.config تعریف نمود . بدین ترتیب ، اعمال تغییرات صرفا" از طریق یك نقطه فراهم می گردد .
برای تعریف یك Cache Profile ، از تگ <add> در بخش <outputCacheProfiles> فایل web.config استفاده می گردد . به cache profile ایجاد شده یك نام و مدت زمان مناسب نسبت داده می شود . كد زیر نحوه انجام این كار را نشان می دهد .

تعریف یك cache profile در فایل web.config

<configuration>
   <system.web>
      <caching>
         <outputCacheSettings>
               <outputCacheProfiles>
                   <add name="ProductItemCacheProfile" duration="60" />
                </outputCacheProfiles>
          </outputCacheSettings>
     </caching>
...
   </system.web>
</configuration>

در ادامه می توان از پروفایل  فوق به كمك خصلت CacheProfile در یك صفحه استفاده نمود .

 <%@ OutputCache CacheProfile="ProductItemCacheProfile" VaryByParam="None" %>

در صورتی كه بخواهیم سایر جزئیات caching نظیر VaryByParam را نیز مشخص نمائیم می توان آن را به عنوان یك خصلت در دایركتیو OutputCache و یا تگ <add> در پروفایل مشخص نمود . 

Output Caching در یك سرویس وب
از Output Caching می توان برای متدهای جداگانه در یك سرویس وب نیز استفاده كرد . برای انجام این كار ، لازم است كه مقدار CacheDuration به WebMethod و قبل از تعریف متد اضافه گردد . كد زیر نتایج یك متد وب را به مدت 30 ثانیه cache می نماید .

<WebMethod(CacheDuration:=30)> _
    Public Function MyMethod(ByVal myParameter As Integer) As String
    ...
    End Function

با توجه به اتمام بحث Output caching  و روش های مختلف بكارگیری آن در برنامه های وب ، در بخش هفتم به بررسی data  caching خواهیم پرداخت .





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


پنجشنبه 16 شهریور 1396 07:16 ق.ظ
Hi, just wanted to say, I enjoyed this blog post. It was funny.
Keep on posting!
سه شنبه 14 شهریور 1396 01:53 ب.ظ
I am really enjoying the theme/design of your site.
Do you ever run into any web browser compatibility issues?
A number of my blog readers have complained about my site not operating
correctly in Explorer but looks great in Firefox.
Do you have any suggestions to help fix this problem?
چهارشنبه 1 شهریور 1396 12:39 ب.ظ
I’m not that much of a internet reader to be honest but your sites really nice,
keep it up! I'll go ahead and bookmark your website to come back in the future.
Many thanks
سه شنبه 8 فروردین 1396 07:50 ق.ظ
Because the admin of this web page is working, no uncertainty very rapidly it will be famous, due to its feature contents.
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر


درباره وبلاگ

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

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








جستجو

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