.net - 如何提高 ASP.NET MVC 应用程序性能?

标签 .net asp.net-mvc performance iis

如何提高 ASP.NET MVC 应用程序性能?

最佳答案

可能的改进来源的汇编列表如下:

一般

  • 使用分析器来发现应用程序中的内存泄漏和性能问题。我个人建议dotTrace
  • 在生产环境以及性能分析期间,以 Release模式(而不是 Debug模式)运行您的网站。 Release模式要快得多。 Debug模式可以隐藏您自己的代码中的性能问题。

缓存

  • 使用CompiledQuery.Compile() 递归地避免 重新编译您的查询 表达式
  • 缓存不易更改 内容使用 OutputCacheAttribute 节省不必要的行动 处决
  • 对经常访问的非敏感信息使用 Cookie
  • 利用ETags和到期 - 写下您的自定义ActionResult必要时的方法
  • 考虑使用RouteName组织你的路线,然后用它来生成 你的链接,尽量不要使用基于表达式树的ActionLink方法。
  • 考虑实现路由解析缓存策略
  • 将重复代码放入 PartialViews 中,避免渲染它xxxx次:如果你 最终在同一个 View 中调用同一个部分 300 次,可能有什么问题 错了。 Explanation And Benchmarks

路由

安全

  • 使用表单例份验证,将您经常访问的敏感数据保存在 身份验证票

DAL

负载均衡

  • 利用反向代理将客户端负载分散到您的应用实例上。 (Stack Overflow 使用 HAProxy ( MSDN )。

  • 使用Asynchronous Controllers实现依赖于外部资源处理的操作。

客户端

  • 优化您的客户端,使用类似 YSlow 的工具为了 提高性能的建议
  • 使用 AJAX 更新 UI 组件,尽可能避免整个页面更新。
  • 考虑实现发布-订阅架构 - 即Comet-用于内容交付 基于超时重新加载。
  • 如果可能,将图表和图形生成逻辑移至客户端。图生成 是一项昂贵的事件。将您的服务器从 不必要的负担,并允许您在本地处理图表而无需创建新的 请求(即 Flex 图表、 jqbargraphMoreJqueryCharts )。
  • 将 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/

相关文章:

performance - SSL 客户端证书验证优化

javascript - Breeze的executeQuery在IE11中比Chrome慢很多

.net - System.Drawing.Color 相等运算符不会将 0xffffffff 视为 Color.White

c# - GroupBy 复杂查询

jquery - 使用 CORS (Access-Control-Allow-Origin) 响应 header 集执行 XSS 时,cookie 不会在 ajax 请求 header 中发送

asp.net-mvc - "inheriting"来自通用模板应用程序的 ASP.NET MVC 站点? ( Multi-Tenancy )

python - 基于子字符串匹配执行合并?

c# - 在 Nuget 包中包含 .exe 文件是不好的做法吗?

.net - MessageInspector消息: "This message cannot support the operation because it has been copied."

c# - 如何从程序集配置文件中检索 AppSettings?