ASP.NET Tutorial/Cache/Page Output Cache — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
(нет различий)
|
Текущая версия на 14:57, 26 мая 2010
Содержание
- 1 Creating Page Output Cache Profiles
- 2 Manipulating the Page Output Cache Programmatically
- 3 OutputCache Duration="20" VaryByParam="None"
- 4 Varying the Output Cache by a Custom Function
- 5 Varying the Output Cache by Browser
- 6 Varying the Output Cache by Control
- 7 Varying the Output Cache by Header
- 8 Varying the Output Cache by Parameter
- 9 You enable Page Output Caching by adding an <%@ OutputCache %> directive to a page.
Creating Page Output Cache Profiles
<source lang="csharp">
Configure Page Output Caching in a web configuration file and apply the settings to multiple pages. You can set the same caching properties in a Cache Profile as you can set in an individual page"s <%@ OutputCache %> directive. A Cache Profile named Cache1Hour that caches a page for one hour. File: Web.Config <configuration>
<system.web> <caching> <outputCacheSettings> <outputCacheProfiles> <add name="Cache1Hour" duration="3600" varyByParam="none" /> </outputCacheProfiles> </outputCacheSettings> </caching> </system.web>
</configuration>
File: Default.aspx <%@ Page Language="C#" %> <%@ OutputCache CacheProfile="Cache1Hour" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">
<title>Output Cache Profile</title>
</head> <body>
<form id="form1" runat="server">
<%= DateTime.Now.ToString("T") %>
</form>
</body> </html></source>
Manipulating the Page Output Cache Programmatically
<source lang="csharp">
HttpCachePolicy class can perform all the tasks that you can perform with the <%@ OutputCache %> directive. The page is cached on the browser, proxy servers, and web server for 15 seconds. File: Default.aspx <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server">
void Page_Load() { Response.Cache.SetCacheability(HttpCacheability.Public); Response.Cache.SetExpires(DateTime.Now.AddSeconds(15)); Response.Cache.SetMaxAge(TimeSpan.FromSeconds(15)); Response.Cache.SetValidUntilExpires(true); Response.Cache.SetLastModified(DateTime.Now); Response.Cache.SetOmitVaryStar(true); }
</script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">
<title>Program OutputCache</title>
</head> <body>
<form id="form1" runat="server">
<%= DateTime.Now.ToString("T") %>
<a href="Default.aspx">Request this Page</a>
</form>
</body> </html></source>
OutputCache Duration="20" VaryByParam="None"
<source lang="csharp">
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="OutputCaching" %> <%@ OutputCache Duration="20" VaryByParam="None" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">
<title>Untitled Page</title>
</head> <body>
<form id="form1" runat="server">
<asp:Label ID="lblDate" runat="server" EnableViewState="False" Font-Bold="True" Font-Size="X-Large"></asp:Label>
</form>
</body> </html> File: Default.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class OutputCaching : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) { lblDate.Text = "The time is now:
"; lblDate.Text += DateTime.Now.ToString(); }
}</source>
Varying the Output Cache by a Custom Function
<source lang="csharp">
You create the custom function in the Global.asax file by overriding the GetVaryByCustomString() method. File: Global.asax <%@ Application Language="C#" %> <script runat="server">
public override string GetVaryByCustomString(HttpContext context, string custom) { if (String.rupare(custom, "css") == 0) { return Request.Browser.SupportsCss.ToString(); } return base.GetVaryByCustomString(context, custom); }
</script>
File: Default.aspx <%@ Page Language="C#" %> <%@ OutputCache Duration="3600" VaryByParam="none" VaryByCustom="css" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server">
void Page_Load() { if (Request.Browser.SupportsCss) pnlCss.Visible = true; else pnlNotCss.Visible = true; }
</script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">
<title>Vary By Custom</title>
</head> <body>
<form id="form1" runat="server">
<asp:Panel
id="pnlCss"
Visible="false"
Runat="server">
Hello!
</asp:Panel>
<asp:Panel
id="pnlNotCss"
Visible="false"
Runat="server">
Hello!
</asp:Panel>
</form>
</body> </html></source>
Varying the Output Cache by Browser
<source lang="csharp">
<%@ Page Language="C#" %> <%@ OutputCache Duration="3600" VaryByParam="none" VaryByCustom="browser" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">
<title>Vary By Browser</title>
</head> <body>
<form id="form1" runat="server">
<%= DateTime.Now.ToString("T") %>
<%= Request.UserAgent %>
</form>
</body> </html></source>
Varying the Output Cache by Control
<source lang="csharp">
File: MasterDetails.aspx <%@ Page Language="C#" %> <%@ OutputCache Duration="3600" VaryByControl="dropCategories" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">
<title>Master/Details</title>
</head> <body>
<form id="form1" runat="server">
<%= DateTime.Now.ToString("T") %>
<asp:DropDownList id="dropCategories" DataSourceID="srcCategories" DataTextField="Name" DataValueField="Id" Runat="server" /> <asp:Button id="btnSelect" Text="Select" Runat="server" />
<asp:GridView id="grdProducts" DataSourceID="srcProducts" GridLines="none" Runat="server" /> <asp:SqlDataSource id="srcCategories" ConnectionString="<%$ ConnectionStrings:Products %>" SelectCommand="SELECT Id,Name FROM ProductCategories" Runat="server" /> <asp:SqlDataSource id="srcProducts" ConnectionString="<%$ ConnectionStrings:Products %>" SelectCommand="SELECT Title,Director FROM Products WHERE CategoryId=@CategoryId" Runat="server"> <SelectParameters> <asp:ControlParameter Name="CategoryId" ControlID="dropCategories" /> </SelectParameters> </asp:SqlDataSource>
</form>
</body> </html></source>
Varying the Output Cache by Header
<source lang="csharp">
Use the VaryByHeader to create new cached versions of a page in case of new browser header changes. Several standard browser headers are transmitted with each page request, including Accept-Language: a list of languages. User-Agent: type of device making the request. Cookie: the browser cookies created in the current domain. <%@ Page Language="C#" %> <%@ OutputCache Duration="3600" VaryByParam="none" VaryByHeader="User-Agent" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">
<title>Vary By Header</title>
</head> <body>
<form id="form1" runat="server">
<%= DateTime.Now.ToString("T") %>
<%= Request.UserAgent %>
</form>
</body> </html></source>
Varying the Output Cache by Parameter
<source lang="csharp">
The VaryByParam attribute causes a new instance of a page to be cached when a different parameter is passed to the page. File: Master.aspx <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">
<title>Master</title>
</head> <body>
<form id="form1" runat="server">
<asp:GridView id="grdProducts" DataSourceID="srcProducts" AutoGenerateColumns="false" ShowHeader="false" GridLines="none" Runat="server"> <Columns> <asp:HyperLinkField DataTextField="Title" DataNavigateUrlFields="Id" DataNavigateUrlFormatString="~/Details.aspx?id={0}" /> </Columns> </asp:GridView> <asp:SqlDataSource id="srcProducts" ConnectionString="<%$ ConnectionStrings:Products %>" SelectCommand="SELECT Id,Title FROM Products" Runat="server" />
</form>
</body> </html> File: Details.aspx <%@ Page Language="C#" %> <%@ OutputCache Duration="3600" VaryByParam="id" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">
<title>Details</title>
</head> <body>
<form id="form1" runat="server">
<%= DateTime.Now.ToString("T") %>
<asp:DetailsView id="dtlProduct" DataSourceID="srcProducts" Runat="server" /> <asp:SqlDataSource id="srcProducts" ConnectionString="<%$ ConnectionStrings:Products %>" SelectCommand="SELECT * FROM Products WHERE Id=@Id" Runat="server"> <SelectParameters> <asp:QueryStringParameter Name="Id" Type="int32" QueryStringField="Id" /> </SelectParameters> </asp:SqlDataSource>
</form>
</body> </html> You can assign two special values to the VaryByParam attribute: none: causes any query string or form parameters to be ignored.
- caches a new cached version whenever there is a change in query string or form parameter passed to the page.
You can assign a semicolon-delimited list of parameters to the VaryByParam attribute.</source>
You enable Page Output Caching by adding an <%@ OutputCache %> directive to a page.
<source lang="csharp">
The following page caches its contents for 15 seconds. <%@ Page Language="C#" %> <%@ OutputCache Duration="15" VaryByParam="none" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server">
void Page_Load() { lblTime.Text = DateTime.Now.ToString("T"); }
</script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">
<title>Cache Page Output</title>
</head> <body>
<form id="form1" runat="server">
<asp:Label id="lblTime" Runat="server" />
</form>
</body> </html></source>