Add the @ OutputCache
directive to
the top of the
.aspx
file of each page you want to cache with
the VaryByParam
attribute set to
"none
“, as shown here:
<%@ Page Language="vb" AutoEventWireup="false"
Codebehind="CH13CachePageVB.aspx.vb"
Inherits="ASPNetCookbook.VBExamples.CH13CachePageVB" %>
<%@ OutputCache Duration="5" VaryByParam="none" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
...
</html>
This recipe shows the minimum changes required to an
.aspx
file to cache a page of your ASP.NET
application. Only one @
OutputCache
directive can be included per page,
and the Duration
and
VaryByParam
attributes are required.
You specify how long the page is to be retained in the cache by
setting the Duration
attribute to the desired time
in seconds. In our example directive, the page will be rendered on
the first request for the page and placed in the cache. For five
seconds all subsequent requests for the page will be delivered from
the cached copy. After five seconds, the page will again be rendered.
The duration can be set to any positive integer value (1-2,147,483,647), which allows caching a page for approximately 68 years. You may be tempted to use very large numbers; however, every cached page uses server resources and if the page is not needed frequently, you will tie up server resources unnecessarily.
The VaryByParam
attribute is used to define
parameters that determine which cached copy of a page should be sent
to the client. If your page does not vary, simply set the
VaryByParam
attribute to "none
"
and a single copy of the page will be saved in the cache. For an
example of caching multiple copies of a rendered page as a function
of the values in the query string, see Recipe 13.2.
Not all pages should be cached. In fact, caching pages that are used for data input or login functions can result in some very odd behavior. Table 13-1 provides some guidelines for deciding when to cache a page.
Table 13-1. Suggestions for caching pages
Page type |
Should it be cached? |
Comment |
---|---|---|
Completely static |
Yes |
A single copy of the rendered page will be saved in the cache. |
Contents change as a function of query string values |
Possibly |
Multiple copies of the rendered page will need to be saved in the cache (see Recipe 13.2). |
Static, but rendered page varies by client browser |
Yes |
One copy of the rendered page will be saved in the cache for each major version of a browser (see Recipe 13.3). |
Input form |
No |
Caching an input form page can result in the data entered by one user being displayed to another. |
Dynamically created from database |
Possibly |
If the contents of the database change at a known interval, as is the case with currency exchange data, the page can be cached without danger of displaying stale data. If the contents of the database change erratically, the page generally should not be cached. |