asp.net 项目的优化

 

     1:少些循环,特别是循环中访问数据库。
 
      2:代码简洁:减少代码量,初始值尽可能在属性上设置,而不是编写代码。

              意思是 去掉任何一行多余的代码。
  
      3:提升代码执行效率
      
               尽量减少不必要的计算,循环。
     
      4:减少网络传输时间
           
                减少查询次数,减少结果数据集

 

 

 

ASP.NET代码优化一、页面和服务器控件处理

1、ASP.NET代码优化避免到服务器的不必要的往返行程

在某些情况下不必使用 ASP.NET 服务器控件和执行回发事件处理。例如,在 ASP.NET 网页中验证用户输入经常可在数据提交到服务器之前在客户端进行。通常,如果不需要将信息传递到服务器以进行验证或将其写入数据存储区,请避免使用导致到服务器的往返行程的代码,这样可以提高页的性能并改善用户体验。您也可以不执行整个往返行程,而是使用客户端回调从服务器中读取数据。

页面类实现ICallbackEventHandler接口,注册GetCallbackEventReference方法,也就是ajax的回调实现。

针对一次需要载入很多控件的页面(载入比较耗时的页面),我们可以使用ajax技术来达到一定的页面访问性能提升。

2、ASP.NET代码优化使用 Page 对象的 IsPostBack 属性来避免对往返行程执行不必要的处理

如果您编写处理服务器控件回发处理的代码,有时可能需要代码仅在首次请求页时执行,而不是每次回发时都执行。根据该页是否是响应服务器控件事件生成的,使用 IsPostBack 属性有条件地执行代码。

将仅需要首次请求页面时执行的代码放在IsPostBack条件中运行。

3、ASP.NET代码优化只在必要时保存服务器控件视图状态

自动视图状态管理使服务器控件可以在往返行程中重新填充它们的属性值,而您不需要编写任何代码。但是,因为服务器控件的视图状态在隐藏的窗体字段中往返于服务器,所以该功能影响性能。了解在哪些情况下视图状态会有所帮助,在哪些情况下它影响页的性能,这样是有帮助的。例如,如果您将服务器控件绑定到每个往返行程上的数据,因为控件的值会在数据绑定期间用新值替换,所以保存的视图状态没有用处。在这种情况下,禁用视图状态可以节省处理时间并减少页的大小。

默认情况下,为所有服务器控件启用视图状态。若要禁用它,请将控件的 EnableViewState 属性设置为 false。

还可以使用 @ Page 指令禁用整个页的视图状态。当您不从页回发到服务器时,这将十分有用。

@ Control 指令中还支持 EnableViewState 属性以指定是否为用户控件启用视图状态。

查看视图状态的方法:

若要分析服务器控件在页中使用的视图状态的大小,请通过将 trace="true" 属性包含在 @ Page 指令中启用对该页的跟踪。然后在跟踪输出中,查看“控件层次结构”表的“Viewstate”列。

下面情况基本上可以禁用viewstate:

(1)页面控件 (.ascx)

(2)页面不回传给自身。

(3)无需对控件的事件处理。

(4)控件没有动态的或数据绑定的属性值(或对于每个postpack都在代码中处理)

4、ASP.NET代码优化除非有特殊的原因要关闭缓冲,否则使其保持打开状态

禁用 ASP.NET 网页的缓冲会导致大量的性能开销。

5、ASP.NET代码优化Server.Transfer和Response.Redirect的选择

Response.Redirect 简单地告诉浏览器访问另一个页面。Server.Transfer 有利于减少服务器请求,保持地址栏 URL 不变,允许你将 query string 和 form 变量传递到另一个页面,可以隐藏url中传递的参数。

Response.Redirect可以跨站点跳转,Server.Transfer只能同站点跳转。

微软ASP.NET代码优化建议:

使用 Transfer Server 对象或跨页发送的方法在同一个应用程序中的不同 ASP.NET 页之间重定向

如无特殊要求,应优先选择Server.Transfer进行页面跳转

ASP.NET代码优化二、数据访问

1、ASP.NET代码优化将 SQL Server 和存储过程用于数据访问

在 .NET Framework 提供的所有数据访问方法中,使用 SQL Server 进行数据访问是生成高性能、可缩放 Web 应用程序的推荐选择。使用托管 SQL Server 提供程序时,可通过尽可能使用编译的存储过程而不是 SQL 命令获得额外的性能提高。

(仅针对数据库选择SQL Server,数据库为其他的可以忽略此选项)

2、ASP.NET代码优化将 SqlDataReader 类用于快速只进数据游标

SqlDataReader 类提供了从 SQL Server 数据库检索的只进数据流。如果您可以在 ASP.NET 应用程序中使用只读流,则 SqlDataReader 类提供比 DataSet 类更高的性能。SqlDataReader 类使用 SQL Server 的本机网络数据传输格式从数据库连接直接读取数据。例如,当绑定到 SqlDataSource 控件时,通过将 DataSourceMode 属性设置为 DataReader,您将获得更好的性能。(使用数据读取器会导致某些功能的丢失。)另外,SqlDataReader 类实现 IEnumerable 接口,该接口也使您可以将数据绑定到服务器控件。

(仅针对数据库选择SQL Server,数据库为其他的可以忽略此选项) MySql中对应MySqlDataReader,根据需要选择。

3、ASP.NET代码优化尽可能缓存数据和页输出

ASP.NET 提供了一些机制,它们会在不需要为每个页请求动态计算页输出或数据时缓存这些页输出或数据。另外,通过设计要进行缓存的页和数据请求(特别是在站点中预期将有较大通讯量的区域),可以优化这些页的性能。与使用 .NET Framework 的任何其他功能相比,适当地使用缓存可以更好地提高站点的性能。

在使用 ASP.NET 缓存时,应注意以下事项。首先,不要缓存太多项。缓存每个项都有内存开销。不要缓存容易重新计算和很少使用的项。其次,给缓存项分配的有效期不要太短。很快到期的项会导致缓存中不必要的周转,并且会导致额外的代码清除和垃圾回收工作。使用与“ASP.NET Applications”性能对象关联的“Cache Total Turnover Rate”(缓存总流通率)性能计数器,您可以监视缓存中由于项到期而导致的周转。高周转率可能说明存在问题,特别是当项在到期前被移除时。(这种情况有时称作内存压力。)

可以考虑把静态的、变化不大的或者不经常变化需要动态加载的内容放入控件中,使用缓存技术。

﹤%@ OutputCache Duration="100" VaryByParam="none" %﹥

4、ASP.NET代码优化适当地使用 SQL 缓存依赖项

ASP.NET 同时支持基于表的轮询和查询通知,具体取决于所使用的 SQL Server 的版本。所有 SQL Server 版本都支持基于表的轮询。在基于表的轮询中,如果表中的任何内容发生更改,所有侦听器都会失效。这可能导致应用程序中不必要的改动。建议不要将基于表的轮询用于具有许多频繁更改的表。例如,建议将基于表的轮询用于很少更改的目录表。建议不要将基于表的轮询用于订单表,订单表具有更频繁的更新。SQL Server 2005 支持查询通知。查询通知支持特定查询,从而减少在表更改时发送的通知数量。虽然它比基于表的轮询提供更好的性能,但是它无法扩展到适应数千个查询。

(仅针对数据库选择SQL Server,数据库为其他的可以忽略此选项)

5、ASP.NET代码优化使用数据源分页和排序而不是 UI(用户界面)分页和排序

DetailsView 和 GridView 等数据控件的 UI 分页功能可用于支持 ICollection 接口的任何数据源对象。对于每个分页操作,数据控件查询数据源的整个数据集并选择要显示的行,并放弃其余的数据。如果数据源实现 DataSourceView 并且 CanPage 属性返回 true,则数据控件将使用数据源分页而不是 UI 分页。在这种情况下,数据控件仅查询每个分页操作需要的行。因此,数据源分页比 UI 分页更高效。只有 ObjectDataSource 数据源控件才支持数据源分页。若要在其他数据源控件上启用数据源分页,必须从该数据源控件继承并修改其行为。

6、ASP.NET代码优化平衡事件验证的安全性受益和性能开销

从 System.Web.UI.WebControls 和 System.Web.UI.HtmlControls 类派生的控件可以验证事件是否源自该控件所呈现的用户界面。这样有助于防止控件响应伪造的事件通知。例如,DetailsView 控件可以防止 Delete(删除)调用(控件中本质上不支持该调用)的处理以及被操纵而删除数据。此验证会带来一定的性能开销。可以使用 EnableEventValidation 配置元素和 RegisterForEventValidation 方法控制此行为。验证的开销取决于页上的控件数量,并在几个百分点范围内。

强烈建议不要禁用事件验证。在禁用事件验证之前,应该确保不会构造任何可能对应用程序具有意外影响的回发。

7、ASP.NET代码优化,除非必要,否则避免使用视图状态加密

视图状态加密会阻止用户能够读取隐藏视图状态字段中的值。典型情况是在 DataKeyNames 属性中带有一个标识符字段的 GridView 控件。标识符字段是协调对记录的更新所必需的。由于不想要标识符对用户可见,因此可以加密视图状态。但是,加密对于初始化具有恒定的性能开销,并具有取决于被加密的视图状态大小的附加开销。加密为每次页加载而设置,因此在每次页加载时都会发生相同的性能影响。

8、ASP.NET代码优化使用 SqlDataSource 缓存、排序和筛选

如果 SqlDataSource 控件的 DataSourceMode 属性设置为 DataSet,则 SqlDataSource 能够缓存查询产生的结果集。如果以这种方式缓存数据,则控件的筛选和排序操作(使用 FilterExpression 和 SortParameterName 属性进行配置)将使用缓存的数据。在许多情况下,如果缓存整个数据集,并使用 FilterExpression 和 SortParameterName 属性进行排序和筛选,而不是使用带“WHERE”和“SORT BY”子句的 SQL 查询(对于这些查询,每个选择操作都要访问数据库),应用程序会运行得更快。

(根据具体控件,仅支持部分数据库)

ASP.NET代码优化的相关内容就介绍到这里,希望通过本文的讲解你对ASP.NET代码优化有所认识。

 

雅虎给出了优化网站加载速度的34条法则(包括Yslow规则22条) 详细说明,下载转发 ponytail 的译文(来自帕兰映像)。
  1.Minimize HTTP Requests 减少HTTP请求
  图片、css、script、flash等等这些都会增加http请求数,减少这些元素的数量就能减少响应时间。把多个JS、CSS在可能的情况下写进一个文件,页面里直接写入图片也是不好的做法,应该写进CSS里,利用 CSS sprites 将小图拼合后利用background来定位。
  2.Use a Content Delivery Network 利用CDN技术
  CDN 确实是好东西,8过服务器提供商的这项服务一般是要收费的,我以前买的国内空间是有这个的但是我当时根本不知道啥用,现在没了。。。
  3.Add an Expires or a Cache-Control Header 设置头文件过期或者静态缓存
  浏览器会用缓存来减少http请求数来加快页面加载的时间,如果页面头部加一个很长的过期时间,浏览器就会一直缓存页面里的元素。不过这样如果页面里的东西变动的话就要改名字了,否则用户端不会主动刷新,看自己衡量了~ 这项可以通过修改.htaccess文件来实现。
  4.Gzip Components Gzip压缩
  Gzip格式是一种很普遍的压缩技术,几乎所有的浏览器都有解压Gzip格式的能力,而且它可以压缩的比例非常大,一般压缩率为85%。压缩没压缩,可以到 这里 做下测试。
  5.Put Stylesheets at the Top 把CSS放顶部
  让浏览者能尽早的看到网站的完整样式。
  6.Put Scripts at the Bottom 把JS放底部
  网站呈现完毕后再进行功能设置,当然这些JS要在你的加载过程中不影响内容表现。


  7.Avoid CSS Expressions 避免CSS Expressions
  CSS表达式很可怕,这个只被IE支持的东西执行时候的运算量非常大,你移动一下鼠标它都要进行重计算的,但有时候为了做浏览器的兼容必须要用到这个||| IE6去死去死!~
  8.Make JavaScript and CSS External 将JS和CSS外链
  前面讲到了缓存这个事情,一些较为公用的JS和CSS,我们可以使用外链的形式,譬如我就是从Google外链来的Jquery文件,如果我的浏览者在浏览别的使用了这个外链文件的网站时已经下载并缓存了这个文件,那么他在浏览我的网站的时候就不需要再进行下载了!~
  9.Reduce DNS Lookups 减少DNS查找
  貌似是要减少网站从外部调用资源,我的Google分析和picasa的外链图片都算在里面了。
  10.Minify JavaScript and CSS 减小JS和CSS的体积
  写JS和CSS都是有技巧的,用最少的代码实现同样的功能,减少空白,增强逻辑性,用缩写方式等等,当然也有不少工具也能够帮你实现这一点。
  11. Avoid Redirects 避免重定向
  再写入链接时,虽然”http://www. today-s-ooxx. com”和”http://www. today-s-ooxx. com/” 仅有一个最后的”/”只差,但是结果是不同的,服务器需要花时间把前者重定向为后者然后进行跳转,这个要自己注意,也可以在Apache里用Alias 或者mod_rewrite或者DirectorySlash解决。
  12. Remove Duplicate Scripts 删除重复脚本
  重复调用的代码浏览器并不会识别忽略,而是会再次运算一遍,这当然是大大的浪费。
  13. Configure ETags 配置ETags
  搞不清楚咋回事,总之我是在. htaccess里把它删除了。
  14. Make Ajax Cacheable 缓存Ajax
  Ajax是实时响应的,在浏览器接收到新的数据前,旧的数据被缓存,这样能够更好的提高效率。
  15. Flush the Buffer Early 尽早的释放缓冲
  当用户进行页面请求时,服务器端需要花费200到500毫秒时间来拼合HTML,将写在head与body之间,释放缓冲,这样可以将文件头先发送出去,然后再发送文件内容,提高效率。
  16. Use GET for AJAX Requests 用GET方式进行AJAX请求
  Get 方法和服务器只有一次交互(发送数据),而 Post 要两次(发送头部再发送数据)。
  17. Post-load Components 延迟加载组件
  最先加载必须的组件进行页面初始化,然后再加载其他,YUI Image Loader 是很好的例子。
  18. Preload components 预加载组件
  提前加载以后可能用到的东西,和延迟加载并不冲突,它的目的是为后续请求提供更快的响应,参见Google首页上的CSS sprites应用。
  19. Reduce the Number of DOM Elements 减少DOM元素数量
  复杂的页面结构意味着更长的下载及响应时间,更合理更高效的使用标签来架构页面,是好的前端的必备条件。
  20. Split Components Across Domains 跨域分离组件
  页面组件多个来源可以增大你的平行下载量,但注意不要过多,超过2-4个域名会引起上面说到的DNS查找浪费。
  21. Minimize the Number of iframes 减少iframe数量
  需要更有效的利用 ifames。
  iframe 优点:有利于下载缓慢的广告等第三方内容,安全沙箱,并行下载脚本
  iframe 缺点:即使为空也会有较大资源消耗,会阻止页面的onload,非语义
  22. No 404s 不要出现404页面
  站点本身里(非搜索结果)出现404页面,无意义的404页面会影响用户体验并且会消耗服务器资源。
  23. Reduce Cookie Size 减小Cookie
  Cookie在服务器及浏览器之间的通过文件头进行交换,尽可能减小Cookie体积,设置合理的过期时间,能够很好的提高效率。
  24. Use Cookie-free Domains for Components 对组件使用无Cookie的域名
  对静态组件的Cookie读取是一种浪费,使用另一个无Cookie的域名来存放你的静态组件式一个好方法,或者也可以在Cookie中只存放带www的域名。
  25. Minimize DOM Access 减少DOM的访问次数
  JS访问DOM是很慢的,尽量不要用JS来设置页面布局。
  26. Develop Smart Event Handlers 开发灵活的事件处理句柄
  DOM树上过多的元素被加入事件句柄的话,反应效率肯定会低,YUI事件工具有一个 onAvailable 方法可以帮助你灵活的设置DOM事件句柄
  27. Choose < link >over @import 使用< link >而非 @import
  在IE中使用@import就和在页面底部用< link >一样,我们前面说要把< link >放顶部的。
  28. Avoid Filters 避免过滤器的使用
  如果需要Alpha透明,不要使用AlphaImageLoader,它效率低下而且只对IE6及以下的版本适用,用PNG8图片。如果你非要使用,加上_filter以免影响IE7+用户。
  29. Optimize Images 优化图片
  将你的GIF转为PNG8会是个减小体积的好办法,另外有很多方法处理你的JPG及PNG图片以达到优化效果。
  30. Optimize CSS Sprites 优化CSS Sprites
  在CSS Sprites中竖直并尽量紧凑的排列图片,尽量将颜色相似的图片排在一起,会减小图片本身的大小及提高页面图片显示速度。
  31. Don’t Scale Images in HTML 不要在HTML中缩放图片
  图片要用多大的就用多大的,1000X1000的图片被width=”100″ height=”100″以后,本身的KB数是不会减少的。
  32. Make favicon. ico Small and Cacheable 缩小favicon. ico的大小并缓存它
  站点的浏览器ICO应该不是经常换吧,那就长时间的缓存它,并且最好控制在1K以下。
  33. Keep Components under 25K 保证组件在25K以下
  iPhone不能缓存25K以上的组件,并且这还是要在被压缩前。
  34. Pack Components into a Multipart Document 将组件打包进一个多部分的文档中
  就好像在邮件中加入附件一样,一个HTTP请求就够了,但是这一技术需要确保你的代理支持,iPhone就不支持

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值