0

Caching در ASP.NET

 
mohamadaminsh
mohamadaminsh
کاربر طلایی1
تاریخ عضویت : دی 1389 
تعداد پست ها : 25772
محل سکونت : خوزستان

Caching در ASP.NET
چهارشنبه 24 خرداد 1391  6:09 PM

Caching در ASP.NET



۱- مقدمه ای بر Caching در ASP.NET
• Caching عبارت است از قرار دادن حاصل اجرای يک صفحه در يک حافظه سريع جهت دسترسی سريع و استفاده مجدد از آن در ارجاعات بعدی.
• Caching مهمترين فاکتور در ايجاد يک برنامه تحت وب با توانائی و کارائی بالا می باشد.
• محل های Caching عبارتند از Web server, proxy server و client browsers.
• انواع Caching عبارتند:
Output caching
Fragment caching
Data caching
۲- Output Caching
Output Caching چيست؟
• صفحاتی که از Output Caching استفاده می کنند برای بار اول اجرا می شوند و سپس حاصل آن cache می گردد. جهت پاسخگوئی به درخواستهای بعدی برای همين صفحه، از نسخه cache شده استفاده می گردد.
• فوايد Output Caching در کاهش محسوس زمان پاسخ دهی سرور و کاهش بار اضافی بر روی CPU در سرور می باشد.
• استفاده صحيح از Output Caching سرعت و کارائی سايت را بطور محسوسی افزايش می دهد.
• از Output Caching می توان در فايل های با پسوند asmx. ،.aspx و ascx. استفاده نمود.
• با استفاده از دايرکتيو OutputCache @ در بالای فايلهای فوق می توان Output Caching را فعال کرد:
]]>]]>]]>]]>]]>]]>]]>]]>]]>]]>]]>]]>]]>]]>]]>]]>]]>]]>]]>]]>]]>]]>]]>]]>• يا از درون برنامه بصورت زير هم می توان اين کار را انجام داد:
Response.Cache.SetExpires(DateTime.Now.AddSeconds(600));
Response.Cache.SetCacheability(HttpCacheability.Public);
صفات OutputCaching
• Duration: مدت زمان معتبر بودن cache را مشخص می کند. مقداردهی اين صفت الزامی است و مقدار آن بر اساس ثانيه است.
• Location: محل قرار گرفتن cache را مشخص می کند.
در حالت Server صفحه cache شده در حافظه سرور نگهداری می شود.
در حالت Downstream صفحه cache شده بر روی proxy server نگهداری می گردد.
در حالت Client صفحه cache شده بر روی مرورگر کاربر قرار می گيرد.
در حالت Any صفحه cache شده بر روی هر يک از موارد فوق می تواند قرار گيرد.
در حالت None صفحه مربوطه عملا در هيچ کجا cache نخواهد شد.
• VaryByParam: نسخه های cache متفاوتی از صفحه مورد نظر براساس پارامترهای موجود در QueryString و Form يا ترکيبی از آنها ايجاد می گردد.<%@ OutputCache Duration="10" VaryByParam="location;count" %>
• VaryByHeader: نسخه های cache متفاوتی براساس مقادير مختلف پارامتر تعيين شده در HTTP header ايجاد می گردد.<%@ OutputCache Duration="60" VaryByHeader="Accept-Language" %>
• VaryByCustom: اگر مقدار اين صفت کلمه خاص "Browser" باشد، cache مورد نظر براساس نوع و نسخه اصلی مرورگرايجاد خواهد شد. اگر مقدار آن يک رشته دلخواه باشد، آنگاه لازم است که شما متد HttpApplication.GetVaryByCustomString را در فايل Global.asax را بگونه دلخواه بازنويسی کنيد.
۳- Fragment Caching
• علاوه بر اينکه شما می توانيد تمام يک صفحه را cache کنيد، شما حتی می توانيد بخشی از يک صفحه را cache کنيد. به اين عمل Fragment Caching گويند.
• بدين منظور لازم است که شما بخش های مورد نظر را بصورت User Control يا کنترل کاربری ايجاد کرده باشيد.
• هر کنترل کاربری دايرکتيو OutputCache@ مخصوص به خود را دارا می باشد.
• صفات مورد استفاده در اينجا عبارتند از VaryByParam و VaryByControl.
• امکان تعيين محل cache با استفاده از صفت Location مقدور نمی باشد و محل cache همواره بر روی سرور در نظر گرفته می شود.
• VaryByControl: ششمين صفت موجود در دايرکتيو Outputcache@ می باشد. تنها می توان در کنترلهای کاربری از آن استفاده کرد. استفاده از آن سبب می شود تا cacheهای متعددی براساس خواص (properties) کنترل کاربری ايجاد گردد.
جواب این پرسش را تایپ جدید BigInteger داده است. اگر در برنامه فوق نوع متغیر res را به BigInteger تغییر دهیم می توان فاکتوریل اعداد بزرگتری را محاسبه کرد.
البته ذکر این نکته نیز مهم است که استفاده از BigInteger سرعت برنامه را کمی کاهش می دهد. پس باید در استفاده از این تایپ جدید جوانب احتیاط را در نظر گرفته و تنها در صورت نیاز مبرم از BigInteger استفاده کنیم.
• می توان بصورت تودرتو از کنترلهای کاربری با قابليت cache استفاده نمود. در اين صورت يک cache سلسله مراتبی بسيار قدرتمند خواهيم داشت. اين مساله اگر چه نياز به هيچ نوع برنامه نويسی خاصی ندارد اما می تواند سبب مصرف حافظه زيادی گردد.
• سعی نکنيد بصورت برنامه ای به يک کنترل کاربری موجود در cache دسترسی داشته باشيد. در غير اين صورت شما با يک exception برخورد خواهيد کرد. زيرا اين نوع کنترلها در درخت کنترلهای موجود قرار نمی گيرند.
۴- Data Caching
• با استفاده از data cache می توان داده های برنامه مانند رشته ها، DataSetها و ساير اقلام داده و آبجکت را cache کرد.
Cache ("counter") = mycount.text
• اگرچه اين مساله مانند استفاده از متغيرهای از نوع Application است، اما بسيار قوی تر و کارآمدتر می باشد.
• هر قسمت از برنامه که از داده های موجود در cache استفاده می کند، بايد قادر باشد تا در صورت غيرمعتبر بودن cache، بتواند آن را دوباره بسازد.
Public Function GetProductData() As DataSet
If (IsNothing(Cache("ProductData")) Then
Cache("ProductData") = LoadDataSet()
End If
Return Cache("ProductData")
End Function
• توصيه می شود جهت استفاده از cache همواره از مدل فوق استفاده نمائيد.
• جهت داشتن کنترل بيشتر بر cache يا استفاده از امکانات پيشرفته آن از متدهای Cache.Insert و Cache.Add استفاده نمائيد.
• با استفاده از متد Cache.Remove می توانيد داده مورد نظر را از cache حذف نمائيد.

کریمی که جهان پاینده دارد               تواند حجتی را زنده دارد

 

دانلود پروژه و کارآموزی و کارافرینی

تشکرات از این پست
دسترسی سریع به انجمن ها