第11章 网站优化_第1页
第11章 网站优化_第2页
第11章 网站优化_第3页
第11章 网站优化_第4页
第11章 网站优化_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 本章主要从本章主要从4个方面来讲述如何优化个方面来讲述如何优化 ASP.NET网站。主要是两方面,一方面是网站。主要是两方面,一方面是 性能优化,一方面是用户体验优化。在这性能优化,一方面是用户体验优化。在这4 个方面,笔者又讲述了一些比较重要的知个方面,笔者又讲述了一些比较重要的知 识,比如调用存储过程、使用识,比如调用存储过程、使用 StringBuilder类拼接字符串、发布网站、类拼接字符串、发布网站、 使用缓存、使用缓存、AJAX技术等,这些都是非常技术等,这些都是非常 有用的知识,希望读者掌握。有用的知识,希望读者掌握。 数据库方面数据库方面 11.1 C#代码优化代码优化 11

2、.2 A ASP.NET方面 11.3 使用使用AJAX技术技术 11.4 数据库方面数据库方面 从数据库相关的角度来看,值得优化从数据库相关的角度来看,值得优化 的有很多地方,但是对于初学者来说,首的有很多地方,但是对于初学者来说,首 推存储过程。很多初学者都容易忽视存储推存储过程。很多初学者都容易忽视存储 过程的使用。那么使用存储过程有哪些好过程的使用。那么使用存储过程有哪些好 处呢?处呢? 存储过程是存储在服务器上的一组预存储过程是存储在服务器上的一组预 编译的编译的SQL语句,类似于语句,类似于DOS系统中的批系统中的批 处理文件。存储过程具有对数据库立即访处理文件。存储过程具有对数据

3、库立即访 问的功能,信息处理极为迅速。使用存储问的功能,信息处理极为迅速。使用存储 过程可以避免对命令的多次编译,在执行过程可以避免对命令的多次编译,在执行 一次后其执行规划就驻留在高速缓存中,一次后其执行规划就驻留在高速缓存中, 以后需要时只需直接调用缓存中的二进制以后需要时只需直接调用缓存中的二进制 代码即可。代码即可。 11.1.1 在在ADO.NET中调用存中调用存 储过程储过程 存储过程有许多优点。使用存储过程,存储过程有许多优点。使用存储过程, 数据库操作可以封装在单个命令中,进行数据库操作可以封装在单个命令中,进行 执行,可以优化性能并且增强安全性执行,可以优化性能并且增强安全性

4、(比如比如 防止防止SQL注入注入)。虽然可以通过以。虽然可以通过以SQL语句语句 的形式传递参数自变量之前的存储过程名的形式传递参数自变量之前的存储过程名 称来调用存储过程,但如果使用称来调用存储过程,但如果使用 ADO.NET Command对象的对象的Parameters集集 合,则可以显式地定义存储过程参数并访合,则可以显式地定义存储过程参数并访 问输出参数和返回值。问输出参数和返回值。 /*创建存储过程创建存储过程*/ CREATE PROCEDURE c_SelectName sex char(2),-输入参数:性别输入参数:性别 age int-输入参数:年龄输入参

5、数:年龄 AS /*根据年龄和性别查询姓名根据年龄和性别查询姓名*/ SELECT Name FROM PersonInfo WHERE Sex=sex AND Age=age 11.1.2 使用使用LINQ调用存储过调用存储过 程程 除了使用除了使用ADO.NET调用存储调用存储 过程外,也可以使用过程外,也可以使用LINQ to SQL来调用存储过程。这比在来调用存储过程。这比在 ADO.NET中调用存储过程简单中调用存储过程简单 多了。多了。 图图11-1 拖入存储过程到拖入存储过程到LINQ to SQL类类 11.1.3 合理使用连接池合理使用连接池 连接到数据库服务器通常由几个需要

6、连接到数据库服务器通常由几个需要 很长时间的步骤组成。必须建立物理通道很长时间的步骤组成。必须建立物理通道 (例如套接字或命名管道例如套接字或命名管道),必须与服务器,必须与服务器 进行初次握手,必须分析连接字符串信息,进行初次握手,必须分析连接字符串信息, 必须由服务器对连接进行身份验证,必须必须由服务器对连接进行身份验证,必须 运行检查以便在当前事务中登记,等等一运行检查以便在当前事务中登记,等等一 系列的操作。总之,这些操作是比较耗费系列的操作。总之,这些操作是比较耗费 服务器资源的。服务器资源的。 实际上,大多数实际上,大多数Web程序仅使用一个程序仅使用一个 或几个不同的连接配置。这

7、意味着在执行或几个不同的连接配置。这意味着在执行 应用程序期间,许多相同的连接将反复地应用程序期间,许多相同的连接将反复地 打开和关闭。为了使打开的连接成本降至打开和关闭。为了使打开的连接成本降至 最低,在最低,在ADO.NET中可以使用称为连接池中可以使用称为连接池 (Connection Pool)的优化方法。的优化方法。 string coonString = data source=.;User ID=sa;pwd=sa;Initial Catalog=db ;Min Pool Size = 1 ; Max Pool Size=5; using (SqlConnection sqlCo

8、on=new SqlConnection(coonString) sqlCoon.Open(); . 11.1.4 优化查询语句优化查询语句 ASP.NET中中ADO连接消耗的资源相连接消耗的资源相 当大,当大,SQL语句运行的时间越长,占用系语句运行的时间越长,占用系 统资源的时间也越长。因此,尽量使用优统资源的时间也越长。因此,尽量使用优 化过的化过的SQL语句以减少执行时间。比如,语句以减少执行时间。比如, 不在查询语句中包含子查询语句,充分利不在查询语句中包含子查询语句,充分利 用索引等。用索引等。 配置为支持提供配置为支持提供WSDL的的HTTP端点端点 可以指定以下一种可以指定以下

9、一种WSDL配置,用于响应配置,用于响应 提交提交WSDL请求的客户端:请求的客户端: (1)默认的)默认的WSDL; (2)自定义的)自定义的WSDL。 细节决定成败,一只马蹄尚能决定一细节决定成败,一只马蹄尚能决定一 个国家的命运,何况是一句代码呢。编写个国家的命运,何况是一句代码呢。编写 代码需要注意哪方面呢?笔者不可能全部代码需要注意哪方面呢?笔者不可能全部 总结出来,只能是提醒大家注意某些比较总结出来,只能是提醒大家注意某些比较 重要,而容易忽视的地方而已。希望大家重要,而容易忽视的地方而已。希望大家 在自己的程序生涯中,自己总结。在自己的程序生涯中,自己总结。 11.2.1 多用泛

10、型多用泛型 在前面学习过泛型集合,那么使用泛型有如下好处。在前面学习过泛型集合,那么使用泛型有如下好处。 C#的泛型支持:类、结构体、接口、委托以及方法成员。的泛型支持:类、结构体、接口、委托以及方法成员。 C#的泛型可采用的泛型可采用“基类,接口,构造器,值类型基类,接口,构造器,值类型/引用类型引用类型”的约束方式来实现对类型参数的的约束方式来实现对类型参数的“显式约束显式约束”。 可以定义类型安全的数据结构。可以定义类型安全的数据结构。 因为防止了拆箱和装箱,所以可以显著提高性能因为防止了拆箱和装箱,所以可以显著提高性能(装箱和拆箱是比较消耗性能的,应该尽量避免装箱和拆箱是比较消耗性能的

11、,应该尽量避免)。 可在支持泛型和扩展方法时,能够直接对类型使用扩展方法,而不用再反射调用了。可在支持泛型和扩展方法时,能够直接对类型使用扩展方法,而不用再反射调用了。 11.2.2 优先采用使用优先采用使用foreach 循环循环 C#的的foreach语句是从语句是从do,while,或,或 者者for循环语句变化而来的,其相对来说要循环语句变化而来的,其相对来说要 好一些,其可以为任何集合产生最好的迭好一些,其可以为任何集合产生最好的迭 代代码。代代码。foreach循环的定义依赖于循环的定义依赖于.NET框框 架里的集合接口,并且编译器会为实际的架里的集合接口,并且编译器会为实际的 集

12、合生成最好的代码。当在集合上做迭代集合生成最好的代码。当在集合上做迭代 时,可用使用时,可用使用foreach来取代其它的循环结来取代其它的循环结 构。构。 分析分析3个循环个循环 int numbers = new int100; / 循环循环1 foreach ( int i in numbers) Response.Write( i.ToString( ); / 循环循环2 for ( int index = 0; index numbers.Length; index+ ) Response.Write( numbersindex.ToString( ); / 循环循环3 int le

13、n = numbers.Length; for ( int index = 0; index len; index+ ) Response.Write( numbersindex.ToString( ); 11.2.3 不要过度依赖异常处理不要过度依赖异常处理 对于初学者来说,很多时候,使用异对于初学者来说,很多时候,使用异 常处理来的比较方便、简单。但是这里提常处理来的比较方便、简单。但是这里提 醒各位一句:异常大大地降低了性能,所醒各位一句:异常大大地降低了性能,所 以不应该将其用作控制正常程序流程的方以不应该将其用作控制正常程序流程的方 式。如果有可能检测到代码中可能导致异式。如果有可能

14、检测到代码中可能导致异 常的状态,请执行这种操作常的状态,请执行这种操作不要在处不要在处 理该状态之前捕获异常本身。常见的方案理该状态之前捕获异常本身。常见的方案 包括:检查包括:检查null,分析是否数据类型不对,分析是否数据类型不对, 或在应用数学运算前检查特定值。或在应用数学运算前检查特定值。 下面的示例演示可能导致异常下面的示例演示可能导致异常 的代码以及测试是否存在某种状的代码以及测试是否存在某种状 态的代码。两者产生相同的结果态的代码。两者产生相同的结果 try result = 88 / num; catch (Exception e) result = 0; / 功能与上雷同功

15、能与上雷同. if (num != 0) result = 88 / num; else result = 0; 11.2.4 使用使用StringBuilder类拼类拼 接字符串接字符串 C#的的foreach语句是从语句是从do,while,或,或 者者for循环语句变化而来的,其相对来说要循环语句变化而来的,其相对来说要 好一些,其可以为任何集合产生最好的迭好一些,其可以为任何集合产生最好的迭 代代码。代代码。foreach循环的定义依赖于循环的定义依赖于.NET框框 架里的集合接口,并且编译器会为实际的架里的集合接口,并且编译器会为实际的 集合生成最好的代码。当在集合上做迭代集合生成最

16、好的代码。当在集合上做迭代 时,可用使用时,可用使用foreach来取代其它的循环结来取代其它的循环结 构。构。 看似已经将看似已经将“ab”转化成转化成 “abcd”了了(比如使用比如使用 Response.Write()输出输出),可是事,可是事 实是这么吗?实是这么吗? string str = ab; str += cd; ASP.NETASP.NET方面方面 从数据库相关的角度来看,值得优化从数据库相关的角度来看,值得优化 的有很多地方,但是对于初学者来说,首的有很多地方,但是对于初学者来说,首 推存储过程。很多初学者都容易忽视存储推存储过程。很多初学者都容易忽视存储 过程的使用。那

17、么使用存储过程有哪些好过程的使用。那么使用存储过程有哪些好 处呢?处呢? 11.3.1 适当使用服务器控件适当使用服务器控件 服务器控件允许开发人员通过服务器控件允许开发人员通过id属性属性 中指定的名字,来可以引用程序中的控件,中指定的名字,来可以引用程序中的控件, 可以通过编程的方式设置属性和获得值,可以通过编程的方式设置属性和获得值, 因此,服务器端处理方式有较大的灵活性。因此,服务器端处理方式有较大的灵活性。 11.3.2 使用缓存使用缓存 ASP.NET提供了一些简单的机制,其提供了一些简单的机制,其 会在不需要为每个页请求动态计算页输出会在不需要为每个页请求动态计算页输出 或数据时

18、缓存这些页输出或数据。另外,或数据时缓存这些页输出或数据。另外, 通过设计要进行缓存的页和数据请求通过设计要进行缓存的页和数据请求(特别特别 是在站点中预期将有较大通讯量的区域是在站点中预期将有较大通讯量的区域), 可以优化这些页的性能。与可以优化这些页的性能。与.NET Framework的任何的任何Web窗体功能相比,适窗体功能相比,适 当地使用缓存可以更好的提高站点的性能,当地使用缓存可以更好的提高站点的性能, 有时这种提高是超数量级的。有时这种提高是超数量级的。 缓存是一种无需大量时间和分析就可缓存是一种无需大量时间和分析就可 以获得以获得“足够良好的足够良好的”性能的方法。性能的方法

19、。 (1)页面输出缓存页面输出缓存; (2)用户控件缓存用户控件缓存; (3)使用使用Cache对象对象; (4)使用使用Substitution控件动态更新控件动态更新 不缓存的部分不缓存的部分。 11.3.3 优化优化ASP.NET配置文配置文 件件 下面介绍一种简单的方法来设置下面介绍一种简单的方法来设置 web.config文件中的一些常用配置。首先,文件中的一些常用配置。首先, 选择菜单栏选择菜单栏“网站网站”“ASP.NET配置配置” 选项,就能够打开选项,就能够打开ASP.NET Web应用程序应用程序 管理首页,如图管理首页,如图11-2所示。所示。 图图11-2 ASP.NE

20、T Web应用程序管理首页应用程序管理首页 11.3.4 ASP.NET网站预编译网站预编译 如果开发大型如果开发大型Web应用程序,就应该应用程序,就应该 考虑执行预批编译。考虑执行预批编译。ASP.NET在将整个站在将整个站 点提供给用户之前,可以预编译该站点。点提供给用户之前,可以预编译该站点。 这为用户提供了更快的响应时间,提供了这为用户提供了更快的响应时间,提供了 在向用户显示站点之前标识编译时在向用户显示站点之前标识编译时bug的的 方法,提供了避免部署源代码的方法,并方法,提供了避免部署源代码的方法,并 提供了有效地将站点部署到成品服务器的提供了有效地将站点部署到成品服务器的 方

21、法。可以在网站的当前位置预编译网站,方法。可以在网站的当前位置预编译网站, 也可以预编译网站以将其部署到其他计算也可以预编译网站以将其部署到其他计算 机。机。 图图11-3 发布网站窗口发布网站窗口 使用使用AJAXAJAX技术技术 从数据库相关的角度来看,值得优化从数据库相关的角度来看,值得优化 的有很多地方,但是对于初学者来说,首的有很多地方,但是对于初学者来说,首 推存储过程。很多初学者都容易忽视存储推存储过程。很多初学者都容易忽视存储 过程的使用。那么使用存储过程有哪些好过程的使用。那么使用存储过程有哪些好 处呢?处呢? 11.4.1 认识认识AJAX AJAX是是“Asynchronous JavaScript and XML”的缩写,即的缩写,即“异步的异步的JavaScript 和和XML技术技术”。其实真正对。其实真正对JavaScript理理 解了,就会发现这里并没有什么全新的东解了,就会发现这里并没有什么全新的东 西。西。 11.4.2 使用使用AJAX服务器

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论