بهبود سرعت نمایش صفحات در ASP.NET MVC با حذف View Engines اضافی
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: دو دقیقه

در ASP.NET MVC امکان استفاده از چند View Engine به صورت همزمان وجود دارد و همچنین هربار که قرار است Viewایی رندر شود، از تمام این‌ها تا یافتن موتور مناسب نمایش View جاری کوئری می‌گیرد. بدیهی است هرچقدر تعداد موتورهای ثبت شده در اینجا بیشتر باشند، زمان بیشتری نیز برای یافتن موتور نمایشی مناسب صرف خواهد شد؛ خصوصا اگر موتور مناسب در آخر لیست ثبت شده باشد.
در ASP.NET MVC 3 دو موتور نمایشی به صورت پیش فرض نصب هستند (WebForms and Razor). بنابراین اگر صرفا از Razor استفاده می‌کنید، می‌توان موتور اول را کلا از سیستم پردازشی برنامه حذف کرد. برای اینکار تنها کافی است در فایل global.asax.cs برنامه بنویسیم:
protected void Application_Start() {
    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(new RazorViewEngine());
    ...
}
این موارد را توسط Glimpse بهتر می‌توان بررسی کرد. Glimpse یک پروفایلر سمت سرور ASP.NET است و دارای نسخه مخصوص ASP.NET MVC نیز می‌باشد. برای نصب آن باید از طریق NuGet اقدام کرد و حتما دقت داشته باشید که نسخه MVC آن باید نصب شود تا برگه‌های Routing و View آن ظاهر شوند.
پس از نصب از طریق NuGet، به صورت خودکار اسمبلی‌های لازم به پروژه اضافه شده و همچنین فایل web.config برنامه نیز ویرایش می‌شود. در انتهای این فایل سطر ذیل مشخص می‌کند که Glimpse فعال باشد یا خیر.
<glimpse enabled="true" />
پس از نصب، برنامه را اجرا کرده و به آدرس http://localhost/glimpse.axd مراجعه کنید تا صفحه تنظیمات آن ظاهر شود. تنها کاری که باید در اینجا صورت گیرد کلیک بر روی دکمه Turn Glimpse On است.


 به این ترتیب یک کوکی به مرورگر اضافه شده و اکنون پس از بازگشت به صفحه اصلی برنامه و refresh کامل صفحه، در کنار سمت راست پایین صفحه، آیکن آن ظاهر خواهد شد.


بر روی این آیکن کلیک نمائید تا در برگه‌ی View آن، انواع Viewهایی که درگیر نمایش صفحه جاری بوده‌اند، مشخص شوند:


همانطور که ملاحظه می‌کنید در اینجا دو موتور پیش فرض فعال بوده و پس از سعی و خطای صورت گرفته، در انتهای کار Razor انتخاب شده است. اکنون اگر نکته حذف موتورهای نمایشی اضافی را اعمال کنیم به تصویر زیر خواهیم رسید:


هم تعداد سعی و خطاها کمتر شده و هم تعداد فایل‌هایی که بررسی شده است به حداقل رسیده (برای مثال در حالتیکه موتور WebForms فعال باشد، چهار فایل با پسوندهای مختلف در مکان‌های پیش فرض نیز حتما جستجو خواهند شد).
 
  • #
    ‫۱۲ سال و ۳ ماه قبل، چهارشنبه ۱۴ تیر ۱۳۹۱، ساعت ۰۴:۲۸
    یه سوال شاید نه چندان حرفه ای 
    شما گفتید که امکان استفاده از چند View Engine به صورت همزمان وجود دارد .آیا میشه تو یک ویو این کارو انجام داد؟
    • #
      ‫۱۲ سال و ۳ ماه قبل، چهارشنبه ۱۴ تیر ۱۳۹۱، ساعت ۰۴:۳۱
      خیر. همزمانی در اینجا به معنای امکان استفاده همزمان از فایل‌های مستقل aspx و cshtml یا vbhtml است.
      • #
        ‫۱۲ سال و ۳ ماه قبل، چهارشنبه ۱۴ تیر ۱۳۹۱، ساعت ۰۴:۴۹
        یه سوال نامرتیط Ninject  چیه؟کاره همون structuremap میکنه؟
        • #
          ‫۱۲ سال و ۳ ماه قبل، چهارشنبه ۱۴ تیر ۱۳۹۱، ساعت ۰۴:۵۷
          بله. از این نوع کتابخانه‌ها زیاد است. Ninject، StructureMap، AutoFac و غیره. خود مایکروسافت هم یک نمونه دیگر به نام Unity دارد.
  • #
    ‫۵ سال و ۳ ماه قبل، جمعه ۳ خرداد ۱۳۹۸، ساعت ۱۵:۵۲
    با سلام؛ با توجه به یکی شدن ساختار‌های Web API و MVC در NET Core.، آیا استفاده از این روش همچنان امکانپذیر است؟ آیا استفاده از این روش منجر به افزایش عملکرد هردوی آنها خواهد شد؟
    • #
      ‫۵ سال و ۳ ماه قبل، جمعه ۳ خرداد ۱۳۹۸، ساعت ۱۶:۰۱
      در نگارش‌های اول MVC، موتور View پردازش کننده‌ی صفحات aspx هم ارائه شده بود. این حذف در مطلب جاری، به همین مورد بر می‌گردد و تنها باقی نگه داشتن موتور razor ( برای مثال در تصویر سوم، به دنبال فایل‌های aspx هم می‌گردد که اضافی است). در ASP.NET Core اساسا موتور رسمی برای پردازش صفحات aspx ارائه نشده. بنابراین نیازی به مطلب فوق نیست.