ASP.NET性能优化之减少请求
在之前的文章《ASP.NET性能优化之浏览器缓存动态网页》中,我们了浏览器与服务器之间的缓存交互机制。浏览器通过发送If-Modified-Since请求来询问服务器资源是否有所更改,服务器则决定是否让浏览器读取缓存。这种机制仍然存在一定的性能损耗,因为ASP.NET服务器需要接收并处理这些请求。
为了进一步优化性能,我们可以采取一种策略,让浏览器自主决定是否读取缓存,从而彻底减少针对服务器的请求。这种策略主要依赖于HTTP头部的Cache-Control指令,特别是max-age属性。
我们来如何减少静态页面的请求。在IIS中设置Cache-Control是一个有效的方法。通过在需要缓存的页面或文件夹上右键选择属性,我们可以设置其缓存策略。例如,设置一个静态页面的缓存时间为1分钟。
使用HttpWatch观察IE请求该页面后,我们会发现HTTP头中包含了Cache-Control: max-age=60的标识。这意味着在接下来的一分钟内,浏览器会依据这个指令来决定是否读取缓存,而不是每次都向服务器发送请求。
那么在实际操作中,如何区分不同的请求行为呢?主要有以下几种情况:
1. F5刷新:这相当于告诉浏览器忽略缓存,重新从服务器加载页面。它对Last-Modified有效,但对Cache-Control无效。使用HttpWatch观察,会发现浏览器仍然会向服务器发送请求,服务器返回状态码304,表示资源未修改,客户端应继续使用缓存版本。
2. 通过“转到”或光标移入地址栏然后回车:这种方式对Cache-Control有效。在缓存时间内,浏览器会自主决定是否读取缓存,不会向WEB服务器发送请求。通过这种方法可以减少不必要的HTTP请求,提高页面加载效率。
3. CTRL+F5强制刷新:这会强制浏览器从服务器加载页面,即使缓存中有该页面的副本。使用HttpWatch观察,会发现状态码为200,返回全部正文数据。
值得注意的是,网站应该始终提供favicon.ico文件,避免浏览器反复请求该LOGO造成性能损耗。
一、通过web.config设置静态文件缓存
在IIS中设置静态文件缓存是一种常见的方法,但其实我们也可以在web.config文件中进行更为详细的配置。这样,我们可以更灵活地控制哪些文件需要缓存,哪些不需要。
对于想要缓存的静态文件,我们可以在web.config的`
```xml
```
而对于想要关闭缓存的特定文件夹或文件,比如名为"test2.htm"的文件,我们可以这样设置:
```xml
```
二、减少动态页面请求的策略实现
对于动态页面,我们也可以采用类似的缓存策略来提高网页加载速度。这需要我们在编写代码时加入相应的控制指令。以下是一个简单的示例:
```csharp
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性能优化之减少请求
- Bootstrap + AngularJS 实现简单的数据过滤字符查找功
- vue的安装及element组件的安装方法
- PHP程序员简单的开展服务治理架构操作详解(二
- JS获取地址栏参数的两种方法(简单实用)
- 护卫神php套件 php版本升级方法(php5.5.24)
- SqlServer 执行计划及Sql查询优化初探
- js获取一组日期中最近连续的天数
- windows下mysql的主从同步
- 高效的使用 Response.Redirect解决一些不必要的问题
- .NET简单工厂模式讲解
- 不到200行 JavaScript 代码实现富文本编辑器的方法
- Node.js与MySQL交互操作及其注意事项
- JSONP跨域请求实例详解
- 使用jQuery的easydrag插件实现可拖动的DIV弹出框
- YII CLinkPager分页类扩展增加显示共多少页