- Incoming browser requests are mapped to controller actions
- A controller action might return a View
- View handles the display of the data
- Most often the Views are created from the ViewModel data
How to Improve View Performance ?
Tip 01 : Run in Release Mode
- You should always make sure that your application is Compiled in Release Mode
- Your Web.config file Must Looks Like below on Production
<compilation debug="false" targetFramework="4.0">
<assemblies>
</assemblies>
</compilation>
Why This Needs ?
Why This Needs ?
# MVC Will Not do any View Look-up Caching if you are running your application
in Debug Mode
in Debug Mode
Tip 02 : Use only the View Engines that you need
- MVC framework supports having multiple view engines
- Can Configured simultaneously in your application
- And will query each in turn when it is trying to find a View
- In MVC 3 we register two view engines by default (WebForms and Razor)
- There is no reason to pay the performance price for something you are not using
- So make sure you specify only the view engines you need in your Global.asax file
Global.asax file Looks Like below :
protected voidApplication_Start()
{
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());//add razor view engine
Tip 03 : Avoid passing null ViewModels to Views
When it Happens ?
- You pass in a null ViewModel to a View that uses strongly-typed html helpers
Such as in the View :
@model PawLoyalty.ViewModels.Product
@{
@Html.TextBoxFor(m => m.ProductName);
}
- This frequently happens in Insert (Add) scenarios
- Strongly-typed html helpers like above,
- Will try to emit the value of the ViewModel using the provided expression
- However when something along the expression chain is null a NullReferenceException will be thrown,
- When the expression gets evaluated,
- MVC’s expression evaluator catches the exception
- But on a page with multiple such html helpers the cost of the exception adds up
- You can avoid that cost by always passing an instance of the ViewModel to the View
Bad Way :
[HttpGet]
public ActionResult Add() //get empty data for user input operation
{
returnView(); //here the model instance defaults to null
}
[HttpGet]
public ActionResult Add()//get empty data for user input operation
{
returnView(new Product());//here the ViewModel Product has been sent
}
When it Happens :
- Your IIS server has the URL Rewrite module installed
- When you are running ASP.NET MVC 3,
- None of the applications on the server are using it
What is URL Rewrite ?
# Enables Web administrators to create powerful rules to implement URLs
# That are easier for users to remember and easier for search engines to find
Why is it Bad ?
How to Uninstall URL Rewrite ?
# Win 7 --> Controller Panel --> Programs and Features -->
# Enables Web administrators to create powerful rules to implement URLs
# That are easier for users to remember and easier for search engines to find
Why is it Bad ?
- When performing URL generation (e.g : Html.ActionLink)
- MVC 3 checks to see if the currently requested URL has been rewritten by the URL Rewrite module
- The act of checking need significant computing power to solve (because it involves checking server variables)
- So if you are not using URL Rewrite you should Turn it Off (Uninstall)
How to Uninstall URL Rewrite ?
# Win 7 --> Controller Panel --> Programs and Features -->
Important Note : MVC 2 always performs this check.So turning
URL Rewrite off (uninstall) will not make a difference
Tip 05 : Enabling Output Caching
What is Output Caching ?
What is Output Caching ?
- Enables you to cache the content returned by a controller action
- The same content does not need to be generated each and every time the same controller action is invoked
- Caching enables you to avoid performing redundant work on the Server
- Can apply for either individual controller action or an entire controller class
How to Do That ?
- Using [OutputCache] attribute
Lets take a simple Example
public class HomeController : Controller
{
[OutputCache(Duration = 10, VaryByParam = "none")] //cached for 10 seconds
public ActionResult Index()
{
returnView();
}
}
- Read operations Only
When Not to Use it ?
- Writes operations.Such as Update,Delete and Inserts
- Pages which are User Specific.e.g. shopping cart page
Summery of Performance Gain Chart :
Pages/Sec - How many pages can load per second
Page Time (ms) - How long will it take to load a page
Base - Page that has not done any performance gain operations
Conclusion
- You can see that highest performance gain can get by using OutputCache operation
- But OutputCache having its own Limitations
- I will explain more about MVC caching in My future blog post
- If your page is load under 1 second then you may not worry too much about performance gain
I hope this helps to You.Comments and feedback greatly appreciated.
Happy Coding.
Happy Coding.
MVC Related Articles
0 comments:
Post a Comment