如何提高 ASP.NET MVC 应用程序性能?
最佳答案
可能的改进来源的汇编列表如下:
一般
- 使用分析器来发现应用程序中的内存泄漏和性能问题。我个人建议dotTrace
- 在生产环境以及性能分析期间,以 Release模式(而不是 Debug模式)运行您的网站。 Release模式要快得多。 Debug模式可以隐藏您自己的代码中的性能问题。
缓存
- 使用
CompiledQuery.Compile()
递归地避免 重新编译您的查询 表达式 - 缓存不易更改
内容使用
OutputCacheAttribute
节省不必要的行动 处决 - 对经常访问的非敏感信息使用 Cookie
- 利用ETags和到期 - 写下您的自定义
ActionResult
必要时的方法 - 考虑使用
RouteName
组织你的路线,然后用它来生成 你的链接,尽量不要使用基于表达式树的ActionLink方法。 - 考虑实现路由解析缓存策略
- 将重复代码放入
PartialViews
中,避免渲染它xxxx次:如果你 最终在同一个 View 中调用同一个部分 300 次,可能有什么问题 错了。 Explanation And Benchmarks
路由
使用
Url.RouteUrl("User", new { username = "joeuser" })
来指定路线。 ASP.NET MVC Perfomance by Rudi Benkovic使用此助手解析缓存路由
UrlHelperCached
ASP.NET MVC Perfomance by Rudi Benkovic
安全
- 使用表单例份验证,将您经常访问的敏感数据保存在 身份验证票
DAL
- 通过 LINQ 访问数据时 rely on IQueryable
- Leverage the Repository pattern
- 分析您的查询,即Uber Profiler
- 考虑为您的查询提供二级缓存,并为其添加范围和超时,即 NHibernate Second Cache
负载均衡
利用反向代理将客户端负载分散到您的应用实例上。 (Stack Overflow 使用 HAProxy ( MSDN )。
使用Asynchronous Controllers实现依赖于外部资源处理的操作。
客户端
- 优化您的客户端,使用类似 YSlow 的工具为了 提高性能的建议
- 使用 AJAX 更新 UI 组件,尽可能避免整个页面更新。
- 考虑实现发布-订阅架构 - 即Comet-用于内容交付 基于超时重新加载。
- 如果可能,将图表和图形生成逻辑移至客户端。图生成 是一项昂贵的事件。将您的服务器从 不必要的负担,并允许您在本地处理图表而无需创建新的 请求(即 Flex 图表、 jqbargraph 、 MoreJqueryCharts )。
- 将 CDN 用于脚本和媒体内容,以改善客户端的加载(即 Google CDN )
- 缩小 - Compile - 您的 JavaScript,以提高脚本大小
- 将 Cookie 保持较小的大小,因为每次请求时都会将 Cookie 发送到服务器。
- 考虑使用DNS and Link Prefetching如果可能的话。
全局配置
如果您使用 Razor,请在 global.asax.cs 中添加以下代码,默认情况下,Asp.Net MVC 使用 aspx 引擎和 razor 引擎进行渲染。这仅使用 RazorViewEngine。
ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new RazorViewEngine());
在 web.config 中添加 gzip(HTTP 压缩)和静态缓存(图像、CSS...)
<system.webServer> <urlCompression doDynamicCompression="true" doStaticCompression="true" dynamicCompressionBeforeCache="true"/> </system.webServer>
- 删除未使用的 HTTP 模块
- 生成 HTML 后立即刷新(在 web.config 中),并在不使用 View 状态时禁用它
<pages buffer="true" enableViewState="false">
关于.net - 如何提高 ASP.NET MVC 应用程序性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2246251/