Server-side and client-side caching in ASP.NET

Oct 19, 2006

Caching is a very easy solution to many performance related issues on almost any website. There are many different ways to use server-side caching and they all have their own unique advantages. But client-side caching is often ignored in the .NET blogosphere even though it is just as important as the server-side cache.

Everywhere server-side caching is used you can and should use client-side caching as well. Even though the server can serve cached ASP.NET pages very fast it still rely on the browser to download and render the output. When adding client-side caching you get an enormous performance benefit when the page is visited more than once by the same browser.

Firefox and IE6/7 has a slightly different way of interpret client-side caching, so you have to implement it correct to get it to work in both browsers. Here is an example of a method that caches the page on the client based on a date. The date should be the exact date of the last time the content changed.

private void SetClientCaching(DateTime lastModified)

{

  Response.Cache.SetETag(lastModified.Ticks.ToString());

  Response.Cache.SetLastModified(lastModified);

  Response.Cache.SetCacheability(HttpCacheability.Public);

  Response.Cache.SetMaxAge(new TimeSpan(7, 0, 0, 0));

  Response.Cache.SetSlidingExpiration(true);

}

> >>>

>

>

If you use a HTTP Handler (.ashx) or some other means to serve files – it could be XML-files – it could be a good idea to do a server-side caching as well. Here’s a method you can call that does just that:

private void SetFileCaching(string fileName)

{

  Response.AddFileDependency(fileName);

  Response.Cache.SetETagFromFileDependencies();

  Response.Cache.SetLastModifiedFromFileDependencies();

  Response.Cache.SetCacheability(HttpCacheability.Public);

  Response.Cache.SetMaxAge(new TimeSpan(7, 0, 0, 0));

  Response.Cache.SetSlidingExpiration(true);

}

>>

You could use the same method to do standard output caching including client-side caching. >

SetFileCaching(Request.PhysicalPath);

That makes it more powerful than the regular output cache, because it provides client-side caching as well. As mentioned before, there are a lot of ways to use the different kinds of caching and they all bring something to the plate. The code in this example is something I use all the time because it works great for the projects I work on. In the end it is a personal choice.

* $4.95/month ASP.NET Hosting with FREE SQL 2012 DB! – Click Here!

Comments (1) -

Mohammed Hossam
Mohammed Hossam
10/21/2006 10:17:59 AM #

This is cool, nice catch dude

Pingbacks and trackbacks (1)+

Comments are closed

About the author

Mads Kristensen

Mads Kristensen
Program Manager at the Microsoft Web Platform team and founder of BlogEngine.NET.

More...

Month List

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer’s view in any way.