技巧 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个技巧转自微软资料数据层性能技巧1—返回多个结果集技巧2—分页的数据访问技巧3—连接池技巧4—ASP.NET缓存API技巧5—每请求缓存技巧6—后台处理...
ASP.NET Web应用程序开发是微软公司推出的用于构建动态网站、Web应用程序和Web服务的框架。它基于.NET Framework,提供了丰富的功能和工具,使开发者能够高效地创建高性能、安全性和可伸缩性的Web解决方案。 在开发...
ASP.NET是由微软公司推出的一种用于开发Web应用和服务的技术,它允许开发者使用.NET Framework来创建高性能的应用程序。 - **VS.NET工具的运用**:通过实训,学生将熟悉并掌握Visual Studio.NET这一集成开发环境(IDE...
1. **ASP.NET**:ASP.NET是微软提供的一个用于构建Web应用程序的开发框架,它允许开发者使用C#编写代码。ASP.NET提供了多种模型,如Web Forms、MVC(模型-视图-控制器)和ASP.NET Core,每个模型都有其特定的优势和...
6. **ASP.NET Core**:了解微软推出的跨平台框架,支持Windows、Linux和macOS,用于构建高性能的Web应用。包括其模块化架构、依赖注入和跨平台部署。 7. **Web API**:学习如何使用C#创建RESTful Web服务,通过HTTP...
ASP(Active Server Pages)是一种由微软开发的服务器端脚本环境,用于创建动态网页和Web应用程序。在ASP网络应用程序设计中,我们主要关注以下几个关键知识点: 1. **基础概念**:ASP是基于HTTP协议的,它允许...
ASP.NET Web程序设计教程是针对开发人员的一门深入学习课程,旨在教授如何使用ASP.NET框架构建高效、功能丰富的Web应用程序。这门教程涵盖了从基础到高级的多个方面,旨在帮助初学者快速上手并逐步提升专业技能。 ...
ASP.NET是一种由微软公司开发的开源框架,用于构建高性能、基于标准的Web应用程序。这份"ASP.NET开发Web应用程序的文档PPT"详细介绍了如何利用这个强大的工具来开发网站。PPT的内容可能涵盖以下几个核心知识点: 1....
在本主题中,我们将深入探讨"Web 窗体高级技巧二--vs2003",这主要涉及使用Visual Studio .NET 2003进行Web应用开发时的一些...在"Web表單高級技巧二"这个主题中,你可能还会深入学习到更多具体的实践案例和高级用法。
ASP.NET包含ASP.NET MVC(模型-视图-控制器)和ASP.NET Core,后者是跨平台的,允许开发者构建高性能的Web服务和网站。 5. **UWP应用**:针对Windows 10及其以后版本设计,UWP允许开发者编写一次代码,就可以在各种...
ASP.NET Web应用程序开发是Microsoft .NET框架中的一个关键组成部分,用于构建动态、交互式的Web应用程序。这本书"ASP.NET Web应用程序开发新思维英文版"显然深入探讨了这一领域的最新技术和最佳实践,旨在帮助...
《SQL Server 2000 Web应用开发指南》是一本专为开发者设计的教程,旨在帮助读者掌握如何利用SQL Server 2000构建高效、可靠的Web应用程序。SQL Server 2000是微软推出的一款关系型数据库管理系统,它在21世纪初广泛...
C#是Microsoft公司推出的一种面向对象的编程语言,广泛应用于构建Web应用程序,尤其是与.NET Framework或.NET Core平台结合时。下面将对这个主题进行深入探讨。 一、C#基础 C#是一种强类型、面向对象的语言,语法...
这些技术都有其特定的用途和优势,例如MVC模式适合大型、复杂的项目,Web Forms则更适合快速开发和模拟传统桌面应用程序的体验,而ASP.NET Core是一个跨平台的高性能框架,支持.NET 5及更高版本。 在压缩包子文件的...
5. **实体框架核心(Entity Framework Core)**:这是微软提供的轻量级、高性能的对象关系映射(ORM)工具,用于简化数据库操作。通过实体框架,开发者可以使用C#对象来操作数据库,而无需编写SQL语句。 6. **...
2. **编译器**:编译器是计算机科学中的一个重要工具,它将高级编程语言(如C#)编写的源代码转换为机器可执行的二进制代码。在这个案例中,"C#简单编译器"是专门针对C#语言设计的,负责解析源代码,进行语法检查,...
首先,ASP.NET是微软公司推出的用于构建Web应用程序的框架,它基于.NET Framework,提供了丰富的功能和工具,简化了Web应用的开发过程。通过ASP.NET,开发者可以使用诸如C#或VB.NET等.NET兼容语言编写后端代码,同时...
ASP.NET Web应用程序是微软开发的一种用于构建动态网站、web服务和网页应用的框架。它基于.NET Framework,提供了丰富的功能和工具,使得开发者可以快速高效地创建高性能的网站。本资源包含了一个利用C#语言编写的...