本文将介绍一些方法用于优化ASP.NET网站性能,这些方法都是不需要修改程序代码的。它们主要分为二个方面:1. 利用ASP.NET自身的扩展性进行优化。2. 优化IIS设置。
用缓存来优化网站性能的方法,估计是无人不知的。 ASP.NET提供了HttPRuntime.Cache对象来缓存数据,也提供了OutputCache指令来缓存整个页面输出。虽然OutputCache指令使用起来更方便,也有非常好的效果,不过,它需要我们在那些页面中添加这样一个指令。
对于设置过OutputCache的页面来说,浏览器在收到这类页面的响应后,会将页面响应内容缓存起来。只要在指定的缓存时间之内,且用户没有强制刷新的操作,那么就根本不会再次请求服务端,而对于来自其它的浏览器发起的请求,如果缓存页已生成,那么就可以直接从缓存中响应请求,加快响应速度。因此,OutputCache指令对于性能优化来说,是很有意义的(除非所有页面页面都在频繁更新)。
在网站的优化阶段,我们可以用Fiddler之类的工具找出一些内容几乎不会改变的页面,给它们设置OutputCache,但是,按照传统的开发流程,我们需要针对每个页面文件执行以下操作:
1. 签出页面文件。
2. 添加OutputCache指令。
3. 重新发布页面。
4. 签入文件(如果遇到多分支并行,还可能需要合并操作)。
以上这些源代码管理制度会让一个简单的事情复杂化,那么,有没一种更简单的方法能解决这个问题呢?
接下来,本文将介绍一种方法,它利用ASP.NET自身的扩展性,以配置文件的方式为页面设置OutputCache参数。配置文件其它就是一个xml文件,内容如下:
12345678 | <? xml version = "1.0" encoding = "utf-8" ?> < OutputCache xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd = "http://www.w3.org/2001/XMLSchema" >
< Settings >
< Setting Duration = "3" FilePath = "/Pages/a3.aspx" />
< Setting Duration = "10" FilePath = "/Pages/a5.aspx" />
</ Settings > </ OutputCache > |
看了这段配置,我想您应该也能猜到它能有什么作用。
每一行配置参数为一个页面指定OutputCache所需要的参数,示例文件为了简单只使用二个参数,其它可以支持的参数请参考OutputCache指令。
为了能让这个配置文件有效,需要在web.config中配置以下内容(适用于IIS7):
12345 | < system.webServer >
< modules >
< add name = "SetOutputCacheModule" type = "WebSiteOptimize.SetOutputCacheModule, WebSiteOptimize" />
</ modules > </ system.webServer > |
在这里,我注册了一个HttpModule,它的全部代码如下:
1234567891011121314151617181920212223242526272829 | public class SetOutputCacheModule : IHttpModule {
static SetOutputCacheModule()
{
// 加载配置文件
string xmlFilePath = Path.Combine(HttpRuntime.AppDomainAppPath, "OutputCache.config" );
ConfigManager.LoadConfig(xmlFilePath);
}
public void Init(Httpapplication app)
{
app.PreRequestHandlerExecute += new EventHandler(app_PreRequestHandlerExecute);
}
void app_PreRequestHandlerExecute( object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
Dictionary< string , OutputCacheSetting> settings = ConfigManager.Settings;
if ( settings == null )
throw new ConfigurationErrorsException( "SetOutputCacheModule加载配置文件失败。" );
// 实现方法:
// 查找配置参数,如果找到匹配的请求,就设置OutputCache
OutputCacheSetting setting = null ;
if ( settings.TryGetValue(app.Request.FilePath, out setting) ) {
setting.SetResponseCache(app.Context);
}
} |
ConfigManager类用于读取配置文件,并启用了文件依赖技术,当配置文件更新后,程序会自动重新加载:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | internal static
|