views:

513

answers:

3

I am fairly new at using the ASP.NET MVC framework and was hoping that I could find some help about best-practises when caching various parts of my MVC web application. I know that stack overflow uses MVC and some pretty freeking awesome caching techniques, and its MILES faster than my app, even when running locally.

I have a few questions.

  1. How does the caching actually work, and how do you "enable" it, and what are the various options. What is the best kind of caching to use?

  2. My app has a lot of database transactions, lists that regularly change. I am worried about the timliness of page refreshes, in users not getting the most recent version of the data. Whats the best way to strike a balance between web application speed and displaying "up-to-date" data? What best practises have you guys found when having to deal with this issue?

  3. How do I cache different parts (I assume views) with different caching settings? I assume that it could be done with sub-controllers, but I have NFI how to go about doing this.

  4. I am using the Castle.Windor integration to the controllers, I am not sure if this changes anything.

  5. Any other best practises of notes of things to be wary/careful of would be greatly appreciated.

+1  A: 

You can easily cache views using the OutputCache attribute. Any not frequently updated lists I cache as well using nHibernate caching mechanisms.

Craig
+3  A: 

You might want to take a look at Phil Haack post for some donut caching. He's THE reference for ASP.NET MVC :)

Maxim
There's also Stephen Walther and others on ASP.NET MVC. It's not just haacked.
Andrei Rinea
Yeah... but there's nobody as noisy as Phil Haack. Maybe Jeff Atwood beats him on the noisy thing. But that's it.
Maxim
+2  A: 

From a "best practices" perspective, you will need to consider the same things you must consider in any application that uses caching.

  • Is the traffic volume high enough to benefit from caching?
  • How often does a particular piece of data change? How crucial is timeliness?
  • Do I own the data-access layer? If so, can I trigger the refresh in the cache by the actual changing of the data and avoid a time-based expiration?

and the list goes on.

Greg Ogle