نکاتی در مورد عملکرد ASP.Net MVC

چهارشنبه 22 مهر 1394

در این پست می خواهیم به برخی نکات ASP.Net MVC بپردازیم. دسترسی دیتابیس معمولا یکی از بزرگترین محدودیت های عملکرد web Applications می باشد. اما زمانی که شما کوئری های دیتابیس را بهینه و کش می کنید سه نکته وجود دارد که ممکن است کمی بشتر فشارهای خارج از برنامه ASP.Net MVC و وبسرور را کم کند.

نکاتی در مورد عملکرد ASP.Net MVC

دسترسی دیتابیس معمولا یکی از بزرگترین محدودیت های عملکرد web Applications  می باشد. اما زمانی که شما کوئری های دیتابیس را بهینه و کش می کنید سه نکته وجود دارد که ممکن است کمی بشتر فشارهای خارج از برنامه ASP.Net MVC و وبسرور را کم کند. منوط به این که شما کدام ویژگی را استفاده می کنید، ممکن است آنها همیشه در برنامه شما اعمال نشوند و ویژگی و مفید بودن  آن ها اهمیتی نداشته باشد. ما نمی توانیم ضمانت کنیم که چقدر بهبود را بعنوان آنچه برنامه شما انجام می دهد خواهید دید.

غیرفعال کردن موتورهای نمایش(view engin) استفاده نشده

 برنامه شما از قالب نمایشی/ویرایشی built-in استفاده می کند(بوسیله متد Html.Editor یا Html.DisplayFor) درحالی که شما فقط از یک نوع view engin استفاده می کنید.

Asp.Net MVC عموما درمورد کش کردن فایل بسیار خوب است (view, partials,displaye/editor templates). با این حال یک سناریو که کش نشده است از قالب built-in display/editor بطور پیش فرض استفاده می کند.

هر زمان که شما از متد Html.Editor یا  Html.DisplayFor استفاده می کنید و یک قالب فایل منطبق نداشته باشید، MVC بر پایه مدل metadata یک نشانه گذاری مناسب ایجاد خواهد کرد. هرچند، قبل از این اتفاق MVC تمام view engine را برای یافتن یک قالب فایل بررسی خواهد کرد. بیشتر view engine که شما ثبت کردید و تا زمانی که کش نشده باشد، فرآیند درخواست یک صفحه برای زمان بعدی تکرار خواهد شد.

اگر شما فقط از یک view engine در پروژه خود استفاده می کنید باید آنهایی که در Global.asax هستند را پاک کنید. آسان ترین راه برای انجام این کار استفاده از کد زیر می باشد:

ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());

 

اجتناب از ارسال model تهی به views

شما در ارسال یک model تهی به یک view که از html helper قوی استفاده می کنید(مانند HTml.TextBoxFor) . این معمولا در حالات درج یا insert  اتفاق می افتد.

html helperهایی مانند (HTml.TextBoxFor(m=>m.Name برای بیرون ریختن مقدار model با استفاده از expression تلاش خواهد کرد. هرچند زمانی که چیزی در امتداد زنجیره ای از عبارات null می باشد وقتی که عبارت ارزیابی شود، یک NullReferenceException جاری خواهد شد. (thrown) 

expression evaluator MVC مقدار exception را کش خواهد کرد اما در یک صفحه با چند html helper هزینه exception اضافه می شود. شما می توانید از آن هزینه با ارسال یک نمونه از model به view اجتناب کنید.

public ActionResult Insert() {
    // return View(); // here the model instance defaults to null
    return View(new Product());
}

از نصب در آوردن URL Rewrite

سرور IIS یک ماژول URL Rewrite نصب شده دارد اما هیچ یک از برنامه ها روی سرور از آن استفاده نمی کنند.

زمان انجام نسخه URL برای مثال توسط یک متد مثل Html.ActionLink در برخی موارد MVC بررسی می کند که آیا درخواست جاری URL دوباره توسط ماژول URL Rewrite بازنویسی شده است. اگر آن مورد نتیجه پردازش شده باشد، بنابراین با درخواست URL سمت کلاینت مطابقت دارد.

اگر یک URL دوباره نوشته شده باشد، عمل بررسی هزینه ناچیزی خواهد داشت(زیرا شامل بررسی متغیرهای سرور است)

ASP.Net MVC بررسی می کند که اگر URL Rewrite در حالت off باشد و بتواند آن کش کند این واقعیت بدین صورت از نیاز به بررسی متغیرهای سرور برای هر درخواست اجتناب می کند. اگر URL Rewite  در حالت on باشد MVC مجبور به بررسی متغیرهای سرور می باشد، حتی اگر rewriting درخواست خاصی اتفاق نیفتاده باشد. بنابراین اگر از URL Rewrite استفاده نمی کنید باید آن را در حالت turn off قرار دهید. 


 

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

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

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

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