在开发ASP.NET MVC应用时,性能优化是一个不可忽视的环节。本文将介绍一些实用的技巧和方法,帮助提升应用的性能。将从缓存实现、HTTP压缩、jQuery UI库的使用、资源合并、生产代码部署、移除默认HTTP模块以及优化URL生成等方面进行探讨。
缓存是提升Web应用性能的有效手段之一。在ASP.NET MVC中,可以通过添加[OutputCache]属性来实现对视图的缓存。例如,下面的代码展示了如何对GetWeather()方法进行15秒的缓存:
public ActionResult GetWeather(string Id)
{
// ...
}
要对整个控制器进行缓存,可以在控制器类上应用[OutputCache]属性:
[OutputCache(Duration = 15, VaryByParam = "None")]
public class WeatherController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult GetWeather(string Id)
{
// ...
}
}
除了使用[OutputCache]属性,还可以通过Cache API进行更细粒度的缓存控制。System.Web.Caching.Cache类类似于一个字典,可以向其中添加键值对。例如,下面的代码展示了如何将一个项目添加到缓存中,并设置滑动过期时间为10分钟:
Cache.Insert("Key", "Value", null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 10, 0));
ASP.NET的Cache对象运行在Web应用的同一进程中,它不是分布式缓存。如果想在多台机器之间共享ASP.NET缓存,需要为每台机器复制缓存。在这种情况下,需要使用分布式缓存。实现分布式缓存可以使用Microsoft的分布式缓存(代号Velocity)。
实现压缩的最简单方法是应用IIS压缩。可以在ASP.NET MVC应用中应用动作过滤器来压缩响应。
当将ASP.NET MVC应用部署到IIS 6.0时,可能会遇到一些问题。Omar AL Zabir提供了一个解决方案。
CodePlex上有一个YUICompress for .NET的移植版本,它可以压缩任何JavaScript和级联样式表到一个高效的水平。
可以使用jQuery构建丰富的客户端站点用户界面。Dino Esposito有一篇关于构建丰富用户界面的优秀文章。还应该考虑使用Google托管的AJAX库API,因为它可以提高站点性能。
ASP.NET MVC客户端资源合并是另一个优秀的库,可在CodePlex上找到。这个库要求将客户端资源组织成不同的集合,每个集合都有不同的配置设置(尽管没有什么可以阻止有一个1文件资源集合)。每个集合中的资源将被最小化、合并、压缩,并一起缓存,因此可以在1个HTTP请求中请求。
当使用Visual Studio开发ASP.NET应用程序时,默认的debug属性值是true。这些设置如果在生产环境中以默认的调试模式发布,性能会很差。因此,永远不要在生产环境中以debug模式发布网站或应用程序。它应该在web.config中设置为false。
在.NET Framework版本2.0的根Web.config文件中配置了以下默认的httpModules元素。可以根据需要在web.config中移除不需要的模块。