سفارشی سازی caching صفحات view در MVC

جمعه 8 آبان 1394

در این مقاله می خواهیم که سرعت Load صفحات view را افزایش دهیم .با کمک caching می توانیم کاری کنیم که وقتی درخواست های متوالی برای صفحه View ما وجود دارد سریعتر ان را از آدرس فیزیکی خوانده و بارگذاری کنیم.

 سفارشی سازی caching صفحات view در MVC

Optimize کردن View

در این مقاله می خواهیم که سرعت Load صفحات view را افزایش دهیم .با کمک caching می توانیم می توانیم کاری کنیم که وقتی درخواست های متوالی برای صفحه View ما وجود دارد سریعتر ان را از آدرس فیزیکی خوانده و بارگذاری کنیم.

برای افزایش سرعت

مورد اول:تنها از View Engin ایی که نیاز دارید استفاده کنید.

خود mvc از چند View Engin استفاده می کندو زمانی که باید یک View به کاربر نمایش داده شود این View Engin ها به صورت خودکار اجرا می شوند.دو View Engin به صورت پیش فرض در MVC تعبیه شده است. WebForms و Razor  .در برخی از ورژن ها ممکن است که View Engin های دیگری چون nHam و Spark  نیز وجود داشته باشند.برای اینکه کارایی Load صفحات بالاتر رود بهتر است که View Engin هایی که به آنها نیاز ندارید را حذف کنید .برای اینکار در Global.asax و در Application_Start() کد زیر را بنویسید.

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);

            // پاک کردن تماانجین های قبل
            ViewEngines.Engines.Clear();

            //افزودن انجین ریزور
            ViewEngines.Engines.Add(new RazorViewEngine());


        }

مورد دوم:سفارشی سازی LookUpCaching

برای اینکه برنامه خود را در حالت release اجرا کنید باید کد زیر در web.config  موجود باشد.

 <compilation debug="false" />

وقتی برنامه در این حالت اجرا می شود نتیجه حاصل از پیدا کردن صفحات view متناظر با Action ها در Application cache ذخیره می شود.و دیگر لازم نیست برای لود هر view دوباره به آدرس فیزیکی آن مراجعه کرد.

اگر برنامه خود را در حالت debug اجرا کنید MVC هیچ cach ایی از صفحه view شما نخواهد گرفت .و این Performance را بسیار پایین می آورد.

معمولا تعداد view ها آنقدر زیاد نیست که حجم زیادی از حافظه رم را اشغال کند و ارزش این را ندارد که با Cache کردن به مدیریت و Handle کردن های اضافی بپردازیم .اما میتوانیم برای جلوگیری از این کارهای اضافه یک لایه Caching سطح بالاتر به View Engine اضافه کنیم .

یک کلاس جدید به نام TwoLevelViewCache ایجاد کرده و از اینترفیس IViewLocationCache مشتق میکنیم تا به صورت دلخواه بتوانیم اعضای این اینترفیس را پیاده سازی کنیم .

کد های کلاس مورد نظر به صورت زیر است :

  public class TwoLevelViewCache : IViewLocationCache
    {
        private readonly static object s_key = new object();
        private readonly IViewLocationCache _cache;

        public TwoLevelViewCache(IViewLocationCache cache)
        {
            _cache = cache;
        }

        private static IDictionary<string, string> GetRequestCache(HttpContextBase httpContext)
        {
            var d = httpContext.Items[s_key] as IDictionary<string, string>;
            if (d == null)
            {
                d = new Dictionary<string, string>();
                httpContext.Items[s_key] = d;
            }
            return d;
        }

        public string GetViewLocation(HttpContextBase httpContext, string key)
        {
            var d = GetRequestCache(httpContext);
            string location;
            if (!d.TryGetValue(key, out location))
            {
                location = _cache.GetViewLocation(httpContext, key);
                d[key] = location;
            }
            return location;
        }

        public void InsertViewLocation(HttpContextBase httpContext, string key, string virtualPath)
        {
            _cache.InsertViewLocation(httpContext, key, virtualPath);
        }
    }

برای استفاده از این کلاس در قسمت Global.asax و درون تابع Application_Start() کدهای زیر را اضافه می کنیم .

  protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            RouteConfig.RegisterRoutes(RouteTable.Routes);

            ViewEngines.Engines.Clear();
            var ve = new RazorViewEngine();
            ve.ViewLocationCache = new TwoLevelViewCache(ve.ViewLocationCache);
            ViewEngines.Engines.Add(ve);
        }
فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید