当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何提高ASP.NETMVC应用程序性能?》经验,为你挑选了8个好方法。

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



1> George Stock..:

可能的改进来源的汇编清单如下:

一般

利用分析器发现应用程序中的内存泄漏和性能问题.我个人建议使用dotTrace

在生产中以及性能分析期间,在发布模式而非调试模式下运行站点.发布模式要快得多.调试模式可以隐藏您自己的代码中的性能问题.

高速缓存

使用CompiledQuery.Compile() 递归避免重新编译查询表达式

使用OutputCacheAttribute 以保存不必要和操作执行来缓存不易发生变化的内容

对于经常访问的非敏感信息,请使用Cookie

利用ETag和过期 - ActionResult如有必要,编写自定义方法

考虑使用RouteName组织路由然后使用它来生成链接,并尝试不使用基于表达式的ActionLink方法.

考虑实施路由解析缓存策略

把重复的代码放在你的内部PartialViews,避免渲染它xxxx次:如果你最终在同一个视图中调用相同的部分300次,可能会出现问题.解释和基准

路由

使用Url.RouteUrl("User", new { username = "joeuser" })指定的路线.Rudi Benkovic的ASP.NET MVC Perfomance

使用Rudi Benkovic的这个助手ASP.NET MVC Perfomance解析缓存路由UrlHelperCached

安全

使用表单身份验证,将经常访问的敏感数据保留在身份验证票证中

DAL

通过LINQ访问数据依赖于IQueryable

利用存储库模式

描述您的查询,即Uber Profiler

考虑您的查询的二级缓存,并为它们添加范围和超时,即NHibernate Second Cache

负载均衡

利用反向代理,在您的应用实例中传播客户端负载.(Stack Overflow使用HAProxy(MSDN).

使用异步控制器来实现依赖于外部资源处理的操作.

客户端

优化您的客户端,使用YSlow之类的工具来提高性能

使用AJAX更新UI的组件,尽可能避免整个页面更新.

考虑实现一个pub-sub架构-ie Comet-用于基于超时重新加载的内容交付.

如果可能,将图表和图形生成逻辑移动到客户端.图生成是一项昂贵的活动.将服务器从不必要的负担推迟到客户端,并允许您在本地处理图形而无需提出新请求(即Flex图表,jqbargraph,MoreJqueryCharts).

使用CDN的脚本和媒体内容来改善客户端的加载(即谷歌CDN)

缩小 - 编译 - 您的JavaScript以改善脚本大小

保持cookie大小,因为cookie会在每次请求时发送到服务器.

尽可能考虑使用DNS和链接预取.

全局配置

如果您使用Razor,请在global.asax.cs中添加以下代码,默认情况下,Asp.Net MVC使用aspx引擎和剃刀引擎进行渲染.这只使用RazorViewEngine.

ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new RazorViewEngine());

在web.config中添加gzip(HTTP压缩)和静态缓存(images,css,...)

删除未使用的HTTP模块

在生成HTML(在web.config中)后立即刷新HTML,如果不使用它,则禁用viewstate


等你的意思是我失去了性能当我有一个视图通过IList激怒显示结果集并为每个列表项调用Render.PartialView("Row",item)?我输了多少钱?或者我如何衡量绩效收益?

2> ziya..:

基本建议是遵循REST原则,以下几点将这些原理与ASP.NET MVC框架联系起来:

    使您的控制器无状态 - 这更像是一个' Web性能/可扩展性'建议(与微/机器级性能相反)和一个会影响您的应用程序未来的主要设计决策 - 特别是在它变得流行或者您需要一些时容错例如.

    不要使用Sessions

    不要使用tempdata - 它使用会话

    不要试图"过早地"缓存"一切".

    使用表单身份验证

    将经常访问的敏感数据保留在身份验证票证中

    对于经常访问的非敏感信息,请使用Cookie

    使您的资源可以在网络上 缓存

    利用ETags

    使用到期

    如有必要,编写自定义ActionResult类

    利用反向代理

    编译你的JavaScript.还有Closure编译器库也可以这样做(确定还有其他的,只是搜索'JavaScript编译器')

    使用CDN(内容分发网络) - 尤其适用于大型媒体文件等.

    考虑数据的不同类型的存储,例如,文件,键/值存储等 - 不仅仅是SQL Server

    最后但同样重要的是,测试您的网站的性能



3> LukLed..:

Code Climber和此博客条目提供了提高应用程序性能的详细方法.

编译查询将提高应用程序的性能,但它与ASP.NET MVC没有任何共同之处.它将加速每个数据库应用程序,因此它不是真正关于MVC.



4> Craig Stuntz..:

这看起来很明显,但在生产模式和性能分析期间,您可以在发布模式下运行站点,而不是在调试模式下运行.发布模式快得多.调试模式可以隐藏您自己的代码中的性能问题.



5> kd7..:

这不是一个惊天动地的优化,但我想我会把它扔出去 - 使用CDN用于jQuery等.

来自ScottGu本人的引用:Microsoft Ajax CDN使您能够显着提高使用ASP.NET AJAX或jQuery的ASP.NET Web窗体和ASP.NET MVC应用程序的性能.该服务免费提供,无需任何注册,可用于商业和非商业目的.

我们甚至将CDN用于使用jQuery的Moss中的webparts.



6> Keith Adler..:

通过LINQ访问数据依赖于IQueryable ...

为什么使用AsQueryable()而不是List()?

...并获得良好的存储库模式:

在存储库模式中加载子记录

这将优化数据访问,以确保仅加载所需数据,并且仅在需要时加载.



7> zihotki..:

此外,如果您使用NHibernate,您可以打开并为查询设置二级缓存并添加到查询范围和超时.EF,L2S和NHibernate 还有kick ass profiler - http://hibernatingrhinos.com/products/UberProf.它将有助于调整您的查询.



8> 小智..:

我还要补充一下:

    使用Sprite:Sprites是减少请求的好东西.您将所有图像合并为一个图像并使用CSS来获取精灵的大部分内容.Microsoft提供了一个很好的库来实现它: Sprite和Image Optimization Preview 4.

    缓存您的服务器对象:如果您有一些很少更改的引用列表或数据,您可以将它们缓存到内存中,而不是每次都查询数据库.

    使用ADO.NET而不是Entity Framework:EF4 or EF5非常适合减少开发时间,但优化会很痛苦.优化存储过程比实体框架更简单.所以你应该尽可能地使用商店程序.Dapper提供了一种查询和映射SQL的简单方法,具有非常好的性能.

    缓存页面或部分页面:MVC根据一些参数为缓存页面提供了一些简单的过滤器,因此请使用它.

    减少数据库调用:您可以创建一个返回多个对象的唯一数据库请求.查看Dapper网站.

    始终拥有一个干净的架构:即使在一个小项目上,也要拥有干净的n层架构.它将帮助您保持代码清洁,并在需要时更容易优化它.

    您可以查看此模板" Neos-SDI MVC模板 ",它将为您创建一个干净的体系结构,默认情况下会有很多性能改进(请查看MvcTemplate 网站).

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有