首页 > 编程 > .NET > 正文

ASP.NET性能优化之减少请求

2024-07-10 13:24:55
字体:
来源:转载
供稿:网友
这种机制存在的性能损耗,就是服务器的ASP.NET仍旧要接收请求,处理请求。此篇所讲的机制是让浏览器自己去决定是否去读缓存,这样就彻底消灭了针对服务器的请求。

1:减少静态页面请求

要让静态页面支持这个需求,我们需要用到http头中的Cache-Control: max-age。值得注意的是Cache-Control是在HTTP/1.1协议下的标识,它是HTTP/1.0协议中的Expires的升级。为了让静态页支持Cache-Control,一种方案是在IIS中进行设置,如下,我在需要静态缓存的页面或者文件夹上右键->属性:

ASP.NET性能优化之减少请求

可以看到其得到的http头中已经有了Cache-Control: max-age=60这一项。

现在,我需要在1分钟内反复请求该静态页,请求的行为我们分别通过下面几种方式来实现,

F5代表浏览器的一次刷新,它对Last-Modified有效,但是对Cache-Control无效

点击“转到”或者光标移入地址栏然后回车对Cache-Control有效

CTRL+F5强制刷新,返回所有正文

我们通过HttpWatch得到的结果如下:

ASP.NET性能优化之减少请求</staticContent>
</system.webServer>


1.2 关闭静态文件缓存
也可以对单独的文件夹或者文件关闭缓存,如下设置(在<configuration>下):

复制代码 代码如下:


<location path="test2.htm">
<system.webServer>
<staticContent>
<clientCache cacheControlMode="DisableCache"/>
</staticContent>
</system.webServer>
</location>


2:减少动态页面请求
有了对以上静态页面或者说资源的分析之后,我们知道,可以对动态页面请求采用相同的策略,这需要我们自己写代码实现:

复制代码 代码如下:


protected void Page_Load(object sender, EventArgs e)
{
//处理点击“转到”或者光标移入地址栏然后回车,也就是本文所阐述的
this.Response.AddHeader("Cache-Control", "max-age=60");
//真是用来处理F5刷新的,也就是对Last-Modified有效
this.Response.AddHeader("Last-Modified", DateTime.Now.ToString("U", DateTimeFormatInfo.InvariantInfo));
DateTime IfModifiedSince;
if (DateTime.TryParse(this.Request.Headers.Get("If-Modified-Since"), out IfModifiedSince))
{
if ((DateTime.Now - IfModifiedSince.AddHours(8)).Seconds < 60)
{
Response.Status = "304 Not Modified";
Response.StatusCode = 304;
return;
}
}
}


结果如下:

ASP.NET性能优化之减少请求</outputCacheProfiles>
</outputCacheSettings>
</caching>
</system.web>


然后在页面前台引用:

复制代码 代码如下:


<%@ OutputCache CacheProfile="cache1" %>


本文代码比较简单,关键是要体会其中所蕴含的思想,即:把浏览器当成你的网站的缓存的极其重要的一部分。
备注
在本篇中,我使用了AddHeader来进行http头的添加,上篇中有朋友提出来使用Response.Cache.SetMaxAge方法,需要提醒的是,使用该方法,将导致丢失304状态。深层次原因不再细究。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表