Output Cache و Cache Profiling در MVC
دوشنبه 27 اردیبهشت 1395هر قدر هم که شما کدهای خود را بهینه کنید تا کارایی برنامه را بالا ببرید نخواهید توانست بدون استفاده از امکان Caching کارایی را بهبود ببخشید . شما با استفاده از Caching می توانید کاری کنید که یک قطعه کد از برنامه اصلا اجرا نشود.
MVC برای کاربران روش های مختلف cache کردن را قرار داده است .امکان cache کردن برای هر کنترلری و برای هر مدت زمانی امکان پذیر است .البته باید گفت که این امکان برای Action ها هم امکان پذیر است .در این مقاله قصد داریم این امکان را آموزش دهیم .
برای بالا بردن کارایی نرم افزار و افزایش سرعت آن تنها بهینه کردن الگوریتم هایی که نوشته شده است کافی نیست بلکه با استفاده از cachinig می توانید کاری کنید که یک تکه از کدتان اصلا اجرا نشود .و سیستم از همان نتیجه ای که یکبار آنرا اجرا کرده و به دست آورده است ، استفاده کند .
همان طور که گفته شده Caching به یک کنترلر و یا به یک Action اختصاص داده میشود و به این ترتیب View حاصل cache خواهد شد و در زمان درخواستی که به سرور فرستاده می شود همین view ایی که cache شده است نمایش داده می شود .
برای cache کردن از صفت [outputCache(Duration=10)] استفاده می کنیم .با کمک duration مدت زمان Cache را مشخص خواهیم کرد .
برای صفت cache می توان تنظیمات متفاوتی انجام داد که به چند مورد اشاره می کنیم .
VaryByParam این مقدار اگر برابر با none باشد همواره مقدار کش شده قبلی نمایش داده خواهد شد .اگر این پارامتر مقادیر دیگری به جز none داشته باشد اطلاعات کش شده بر اساس مقادیر این پارامتر متفاوت خواهد بود .
Location این پارامتر مکان قرارگیری اطلاعات کش شده را مشخص می کند .
VaryByHeader اطلاعات را بر اساس header های مشخص شده کش می کند .
SqlDependency در این حالت تا زمانی که تغییری در بانک اطلاعاتی صورت نگیرد اطلاعات کش خواهند شد .
بعد از مقدمات گفته شده به سراغ کار عملی می رویم .ابتدا یک پروژه Asp.net از نوع mvc و از نوع Empty ایجاد می کنیم .
حال یک کنترلر به نام home از نوع empty ایجاد می کنیم سپس در داخل این کنترلر کدهای زیر را اضافه می کنیم .
public class HomeController : Controller { // GET: Home public ActionResult Index() { return View(); } [OutputCache(Duration = 5)] public string GetHeaderData() { return "محتوای هدر در این زمان بازگردانده شد " + DateTime.Now.ToString(); } [OutputCache(Duration = 10)] public string GetFooterData() { return "محتوای فوتر در این زمان بازگردانده شد " + DateTime.Now.ToString(); } }
همان طور که می بینید ما سه Action داریم .اکشن ایندکس که view مربوط به ایندکس را بر می گرداند و اکشن GetHeaderData و دیگری اکشن GetFooterData.
در داخل اکشن GetHeaderData که هدر صفحه را بر می گرداند برای اینکه مفهوم Cache را توضیح دهیم در این قسمت از Datetime استفاده کرده ایم .به صورت ساده این اکشن یک متن را به همراه زمانی که این متن از داخل سرور به کلاینت آمده است را نشان می دهد .به دلیل وجود صفت [OutputCache(Duration = 5)] تاریخی که در کنار متن هدر چاپ می شود تا زمان سپری شدن Duration = 5 به روزرسانی نخواهد شد .اگر شما مدام صفحه را Refresh کنید اتفاقی نخواهد افتاد اما به محض اینکه زمان 5 ثانیه سپری شود صفحه را به روزرسانی کنید خواهید دید که محتوای header فرق خواهد کرد .
اکشن GetFooterData محتوای footer را برای ما تولید می کند .این اکشن در داخل view ایندکس فراخوانی شده است .مانند header این قسمت هم یک متن ساده در کنار تاریخی که این درخواست از سرور خارج شده است را نمایش می دهد .زمان cache این Action برابر با 10 ثانیه است .
بعد از اجرای برنامه شکل زیر را خواهید دید .
یک نکته امنیتی که ذکر آن در اینجا حائز اهمیت است این است که صفحاتی که باید اعتبارسنجی شوند را cache نکنید .
یکی دیگر از تنظیماتی که می توان برروی cache انجام داد پارامتر CacheProfile است .برای تنظیم این ویژگی باید از web.config استفاده کرد .
تنظیمات زیر را در داخل Web.config و بخش system.web وارد می کنیم .برای استفاده از این cache و با این تنظیم خاص به صورت زیر عمل می کنیم .
[OutputCache(Duration = 5)] - [OutputCache(CacheProfile = "HeaderCache")] [OutputCache(Duration = 1mvc-output-cache-and-cache-profiling2)] ïƒ [OutputCache(CacheProfile = "FooterCache")]
آموزش asp.net mvc
- ASP.net MVC
- 2k بازدید
- 7 تشکر