`
lzj0470
  • 浏览: 1244658 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

编写高性能 Web 应用程序的 10 个技巧 转自微软资料二

阅读更多

技巧 7 — 页输出缓存和代理服务器


ASP.NET 是您的表示层(或者说应该是您的表示层);它由页、用户控件、服务器控件(HttpHandlers 和 HttpModules)以及它们生成的内容组成。如果您具有一个 ASP.NET 页,它会生成输出(HTML、XML、图像或任何其他数据),并且您针对每个请求运行此代码时,它都会生成相同的输出,那么您就拥有一个可用于页输出缓存的绝佳备选内容。

将此行内容添加页的最上端

<%@ Page OutputCache VaryByParams="none" Duration="60" %>

就可以高效地为此页生成一次输出,然后对它进行多次重用,时间最长为 60 秒,此时该页将重新执行,输出也将再一次添加到 ASP.NET 缓存。通过使用一些低级程序化 API 也可以完成此行为。对于输出缓存有几个可配置的设置,如刚刚讲到的 VaryByParams 属性。VaryByParams 刚好被请求到,但还允许您指定 HTTP GET 或 HTTP POST 参数来更改缓存项。例如,只需设置 VaryByParam="Report" 即可对 default.aspx?Report=1 或 default.aspx?Report=2 进行输出缓存。通过指定一个以分号分隔的列表,还可以指定其他参数。

很多人都不知道何时使用输出缓存,ASP.NET 页还会生成一些位于缓存服务器下游的 HTTP 标头,如 Microsoft Internet Security and Acceleration Server 或 Akamai 使用的标头。设置了 HTTP 缓存标头之后,可以在这些网络资源上对文档进行缓存,客户端请求也可在不必返回原始服务器的情况下得以满足。

因此,使用页输出缓存不会使得您的应用程序效率更高,但是它可能会减少服务器上的负载,因为下游缓存技术会缓存文档。当然,这可能只是匿名内容;一旦它成为下游之后,您就再也不会看到这些请求,并且再也无法执行身份验证以阻止对它的访问了。

========================
技巧 8 — 运行 IIS 6.0(只要用于内核缓存)


如果您未运行 IIS 6.0 (Windows Server? 2003),那么您就错过了 Microsoft Web 服务器中的一些很好的性能增强。在技巧 7 中,我讨论了输出缓存。在 IIS 5.0 中,请求是通过 IIS 然后进入 ASP.NET 的。涉及到缓存时,ASP.NET 中的 HttpModule 会接收该请求,并返回缓存中的内容。

如果您正在使用 IIS 6.0,就会发现一个很好的小功能,称为内核缓存,它不需要对 ASP.NET 进行任何代码更改。当请求由 ASP.NET 进行输出缓存时,IIS 内核缓存会接收缓存数据的一个副本。当请求来自网络驱动程序时,内核级别的驱动程序(无上下文切换到用户模式)就会接收该请求,如果经过了缓存,则会将缓存的数据刷新到响应,然后完成执行。这就表示,当您将内核模式缓存与 IIS 和 ASP.NET 输出缓存一起使用时,就会看到令人不敢相信的性能结果。在 ASP.NET 的 Visual Studio 2005 开发过程中,我一度是负责 ASP.NET 性能的程序经理。开发人员完成具体工作,但是我要看到每天进行的所有报告。内核模式缓存结果总是最有意思的。最常见的特征是网络充满了请求/响应,而 IIS 运行时的 CPU 使用率只有大约 5%。这太令人震惊了!当然使用 IIS 6.0 还有一些其他原因,但是内核模式缓存是其中最明显的一个。

===========================
技巧 9 — 使用 Gzip 压缩


虽然使用 gzip 并不一定是服务器性能技巧(因为您可能会看到 CPU 使用率的提高),但是使用 gzip 压缩可以减少服务器发送的字节数量。这就使人们觉得页速度加快了,并且还减少了带宽的用量。根据所发送数据、可以压缩的程度以及客户端浏览器是否支持(IIS 只会向支持 gzip 压缩的客户端发送经过 gzip 压缩的内容,如 Internet Explorer 6.0 和 Firefox),您的服务器每秒可以服务于更多的请求。实际上,几乎每当您减少所返回数据的数量时,都会增加每秒请求数。

Gzip 压缩已经内置到 IIS 6.0 中,并且其性能比 IIS 5.0 中使用的 gzip 压缩要好的多,这是好消息。但不幸的是,当尝试在 IIS 6.0 中打开 gzip 压缩时,您可能无法在 IIS 的属性对话中找到该设置。IIS 小组在该服务器中置入了卓越的 gzip 功能,但是忘了包括一个用于启用该功能的管理 UI。要启用 gzip 压缩,您必须深入到 IIS 6.0 的 XML 配置设置内部(这样不会引起心脏虚弱)。顺便提一句,这归功于 OrcsWeb 的 Scott Forsyth,他帮助我提出了在 OrcsWeb 上宿主的 www.asp.net 服务器的这个问题。

本文就不讲述步骤了,请阅读 Brad Wilson 的文章,网址是 IIS6 Compression。还有一篇有关为 ASPX 启用压缩的知识库文章,网址是 Enable ASPX Compression in IIS。但是您应该注意,由于一些实施细节,IIS 6.0 中不能同时存在动态压缩和内核缓存。

==============================
技巧 10 — 服务器控件视图状态


视图状态是一个有趣的名称,用于表示在所生成页的隐藏输出字段中存储一些状态数据的 ASP.NET。当该页张贴回服务器时,服务器可以分析、验证、并将此视图状态数据应用回该页的控件树。视图状态是一个非常强大的功能,因为它允许状态与客户端一起保持,并且它不需要 cookie 或服务器内存即可保存此状态。很多 ASP.NET 服务器控件都使用视图状态来保持在与页元素进行交互期间创建的设置,例如保存对数据进行分页时显示的当前页。

然而使用视图状态也有一些缺点。首先,服务或请求页时,它都会增加页的总负载。对张贴回服务器的视图状态数据进行序列化或取消序列化时,也会发生额外的开销。最后,视图状态会增加服务器上的内存分配。

几个服务器控件有着过度使用视图状态的趋势,即使在并不需要的情况下也要使用它,其中最著名的是 DataGrid。ViewState 属性的默认行为是启用,但是如果您不需要,则可以在控件或页级别关闭。在控件内,只需将 EnableViewState 属性设置为 false,或者在页中使用下列设置即可对其进行全局设置:

<%@ Page EnableViewState="false" %>

如果您不回发页,或者总是针对每个请求重新生成页上的控件,则应该在页级别禁用视图状态。

==============================
小结


我为您讲述了一些我认为在编写高性能 ASP.NET 应用程序时有所帮助的技巧。正如我在本文前面部分提到的那样,这是一个初步指南,并不是 ASP.NET 性能的最后结果。(有关改善 ASP.NET 应用程序性能的信息,请参阅 Improving ASP.NET Performance。)只有通过自己的亲身体验才能找出解决具体性能问题的最好方法。但是,在您的旅程中,这些技巧应该会为您提供一些好的指南。在软件开发中,几乎没有绝对的东西;每个应用程序都是唯一的。

请参阅提要栏“Common Performance Myths”。

Rob Howard 是 Telligent Systems 的创始人,专门从事高性能 Web 应用程序、知识库管理和协作系统方面的工作。Rob 以前受雇于 Microsoft,他在那里帮助设计了 ASP.NET 1.0、1.1 和 2.0 的基础结构。要联系 Rob,请访问 rhoward@telligentsystems.com

分享到:
评论

相关推荐

    编写高性能Web应用程序的10个技巧

    编写高性能Web应用程序的10个技巧软件测试编写高性能Web应用程序的10个技巧转自微软资料数据层性能技巧1—返回多个结果集技巧2—分页的数据访问技巧3—连接池技巧4—ASP.NET缓存API技巧5—每请求缓存技巧6—后台处理...

    C#微软培训资料

    第三章 编写第一个应用程序 .20 3.1 Welcome 程序 .20 3.2 代 码 分 析 .20 3.3 运 行 程 序 .23 .4 添 加 注 释 .25 3.5 小 结 .27 第二部分 C#程序设计基础.28 第四章 数 据 类 型 .28 4.1 值 类 型...

    .net 企业人事管理系统

    .NET就是微软的用来实现XML,Web Services, SOA和敏捷...)如果一个应用程序跟.NET Framework无关,它就不能叫做.NET程序。比如,仅仅使用了XML并不就是.NET应用,仅仅使用SOAP SDK调用一个Web Service也不是.NET应用。

    [ASP.NET.MVC.4.Web编程].徐雷等.扫描版

    本书介绍了微软最新的AS P.NET MVC 4框架,帮助我们了解整个 ASP.NET MVC 4框架的运行原理,包括如何使用ASP.NET MVC 4 框架构建Web应用程序以及如何在...意编写了一个电子交易网站"EBuy '' 应用程序,作为参考实例。

    windows 程序设计

    这意味着Windows不使用系统定时器将处理时间分配给系统中运行的多个应用程序,程序必须自愿放弃控制以便其它程序运行。在Windows NT和Windows 98中,多任务是优先权式的,而且程序自身可分割成近乎同时执行的多个...

    asp.net完全入门

     第四篇 “应用程序”——本篇先介绍如何配置config.web,如何编写global.asax。 再结合一个实例“会员系统”来对应用程序进行深入的讲解。  第五篇 “WEB SERVICE”——本篇对WEB SERVICE进行了详细的讲解。...

    asp.net知识库

    ASP.NET 2.0使用Web Part创建应用程序之二(共二) 体验 .net2.0 的优雅(2) -- ASP.net 主题和皮肤 NET2.0系列介绍(一).NET 2.0 中Web 应用程序主题的切换 ASP.NET 2.0 中Web 应用程序主题的切换 2.0正式版中...

    ASP.NET 2.0快速入门 下载列表 微软

    介绍如何使用ASP.NET开发自己的网站应用,第二讲主要介绍如何使用数据绑定服务器端控件,建设自己的web应用程序。 • 开始时间: 2005-7-29 14:30:00 • 技术等级: Level 200 • 系列: ASP.NET 2.0 快速入门 • 技术:...

    ASP.NET完全入门

     第四篇 “应用程序”——本篇先介绍如何配置config.web,如何编写global.asax, 再结合一个实例“会员系统”来对应用程序进行深入的讲解,让你对ASP.NET的基本 知识在更深入一层。  第五篇 “WEB SERVICE”...

    ASP.Net 开发手册

    本站的又一力作《ASP.Net ...第二章 一个简单的Web Service案例 第三章 数据交换 第四章 存取站点对象 第六篇 性能优化 第七篇 高级应用 第一章 XML及其应用 第二章 三层结构及其应用 第三章 使用MSMQ

    asp.net教程

    &lt;br&gt; 第四篇 “应用程序”——本篇先介绍如何配置config.web,如何编写global.asax, 再结合一个实例“会员系统”来对应用程序进行深入的讲解,让你对ASP.NET的基本 知识在更深入一层。 &lt;br&gt; 第五...

    《ASP.Net 手册》。金桥网络信息服务网

    《ASP.Net 手册》现已成功推出,供广大...第二章 一个简单的Web Service案例 第三章 数据交换 第四章 存取站点对象 第六篇 性能优化 第七篇 高级应用 第一章 XML及其应用 第二章 三层结构及其应用 第三章 使用MSMQ

    《ASP.NET 完全入门》

    第四篇 “应用程序”——本篇先介绍如何配置config.web,如何编写global.asax,再结合一个实例“会员系统”来对应用程序进行深入的讲解,让你对ASP.NET的基本 知识在更深入一层。 第五篇 “WEB SERVICE”——本篇对...

    ASP3《高级编程》(第二部分)

    包含在Windows 2000中的Active Server Pages 3.0 (ASP 3.0)是Microsoft公司推出的又一个支持Internet的功能强大的网页制作软件包,除了继续保持其适应于各种浏览器的基本特征外,与ASP 2.0相比,功能更加强大,目前...

    asp.net 完全入门

    第二章 一个简单的Web Service案例 第三章 数据交换 第四章 存取站点对象 第六篇 性能优化 第七篇 高级应用 第一章 XML及其应用 第二章 三层结构及其应用 第三章 使用COM 第四章 使用MTS 第五章 使用...

    ASP.NET完全入门PDF

    第一篇 概论 第一章 微软.NET战略和ASP.NET简介i....第六篇 性能优化第七篇 高级应用第一章 XML及其应用第二章 三层结构及其应用 第三章 使用COM 第四章使用MTS 第五章使用MSMQ 第六章在ASP中使用.NET

Global site tag (gtag.js) - Google Analytics