动态网站制作指南



当前位置 > 网站建设学院 > 网络编程 > ASP技巧 Rss
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket

最优化ASP程序性能


发表日期:2000-8-29


    Active Server Pages可以让动态页面很快地执行,但是,在代码中和数据库的连接上加入一些技巧,就能让程序更
快地执行。这是一篇关于如何精制脚本程序以及asp特征来达到最大速度的文章。任何在用户点击按钮到在屏幕上出现结果
间延迟都会让用户茫然,对于一个商业站点,这就意味着潜在的用户损失。
ASP脚本的尺寸


   我们也许不能控制用户的带宽,但是通过优化ASP站点,我们的确能够使应用达到最佳性能。许多潜在的性能收获可
以通过系统调整,而不是改变代码。

   因素

   首先,有哪些因素可能影响ASP程序的性能?很不幸,有许多吗?这里仅仅是一些:

有限的带宽
服务器端的处理器和其他硬件的速度
在服务器上运行的其他进程(比如那些OpenGL屏幕保护程序中的一个)
数据库连接模式,连接池,或者单独的数据库(比如Oracle、SQLServer、access
使用的语言
存储过程和SQL
使用未编译组件,而不是VB或者JavsScript的ASP
良好的编程习惯,比如对错误的处理
   对于一个有经验的具备良好IIS知识的开发者来说,以上一些特征是很平常的,但是另外一些可能非常复杂。在这篇
文章中,让我们来研究一下如何做才能节省毫秒级别的时间,而不是试图面面俱到。

   你的ASP脚本程序对于实现的功能是否显得过长?这就会从开始影响程序的性能。对于收集信息和格式化输出,ASP脚
本是非常有用的,但是脚本是按照行来解释执行的,所以代码越长,执行时间越长。

   如果有一个很长的ASP脚本程序,怎么样才能减少长度呢?这里有一些建议。

   你可以将它们转换为服务器端组件,换言之,就是创建一个Visual Basic DLL文件,或者使用任何现代的Windows 程
序语言和COM兼容语言来建立一个未编译组件,并且在服务器上注册。关于这个功能的教程请参阅
http://www.webdevelopersjournal.com/articles/activex_for_asp.html。一个编写很好的ActiveX组件不仅能大幅度提
高速度,而且,它还能大大地提高你的软件的保护程度,特别是你为第3方开发ASP程序时。

   因为脚本是一行行解释执行的,所以排除多余的脚本或者建立有效率的脚本,就能提高程序性能。如果在一个单一页
面中有成百行的ASP脚本,你就可能很好地将程序分割成用户、商业和数据服务部分。实际上,如果这么做了,你就会发现
一些多余的代码。比如,如果需要显示几个表格,就可以编写一个通用的表格显示函数,这样,在需要的地方调用就可以
了。

   与尺寸相关的另外一个问题就是包含文件的长度。当执行一个#include文件时,整个文件都被调入,就象在被包含的
文件中存在一样。所以,如果有一个甬余的包含文件,其中包含了许多全局方法和变量定义,那么就请注意它们将被调入
每一个包含它们的文件中,而不管是否可用。ASP缓存了所有的扩展代码,导致了效率低下的搜索。在这种情况下,包含文
件必须变小。尽管包含文件被服务器处理为单独的请求,但是过多的使用#include,就会导致下载时间的过度增加。

< !-- #include file="Header.asp" --  >
< !-- #include file="Footer.asp" -- >
< SCRIPT language="vbscript" runat="server" >

Sub Main()
  WriteHeader
  WriteBody
  WriteFooter
End Sub

Sub WriteBody()
  ...
End Sub

Main     'call sub Main
< /SCRIPT >

   如果脚本很长,注意要使用 Response.IsClientConnected 命令,这将避免因客户端不再连接时CPU浪费运行循环。

< %
'check to see if the client is connected
If Not Response.IsClientConnected Then
  'still connected so PRoceed
Else
  'disconnected
End If
% >

分散ASP代码和HTML语言命令
有人这么做吗?当描述表格时,在ASP和HTML进行切换,比如:

< HTML >
< BODY >
< %
  Set MyConn = Server.CreateObject("ADODB.Connection")
  MdbFilePath = Server.MapPath("sample.mdb")
  MyConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
  SQL_query = "SELECT * FROM Friends"
  Set RS = MyConn.Execute(SQL_query)
  WHILE NOT RS.EOF
% >
< LI >< %=RS("Name")% >: < A HREF="< %=RS("Link")% >" >Homepage< /A >
< %
  RS.MoveNext
  WEND
% >
< /BODY >
< /HTML >

   另外一个例子是使用If命令:

< %
  If Not session("DBOpen") Then
% >
< H1 >Database not connected< /H1 >
< %
  Else
% >
< H1 >Database open< /H1 >
< %
  End If
% >

   在以上2个例子中,脚本性能能通过保持ASP程序块在服务器端以及使用Response.Write来产生HTML代码来提高性能,
就象下面一样:

< %
If not Session ("DBOpen") Then
   Response.Write "< H1 >Database not connected< /H1 >"
Else
   Response.Write "< H1 >Database open< /H1 >"
End If
% >

对于大且长的脚本,你可以通过上面的方法看到明显的性能提高。
   会话状态

   毋庸置疑,通过session在ASP中保持状态是一个非常重要的特征。然而,这将影响程序的性能。很明显,服务器的伸
缩性因为session仅仅能局限于单一服务器而变成一个问题,一个session为每一个用户都要消耗资源。

   如果不使用session变量,而且实际上也可能不需要,因为使用隐藏表单域、在数据库中存储数值以及使用查询字符
串可以完成session的功能,这时,就应该屏蔽session状态,代码如下:

   @EnableSessionState = False

   这样,ASP就将不再检查session信息。

   如果确实要依靠session状态,那么请避免在session对象中存放大量的数据。如果设置了客户端的HTTP Cookies,那
么IIS中的Session是生效的,并且直到session被中止或者到期,为每一个session分配的内存空间将一直保留。由于这个
原因,当有许多并发用户访问站点时,资源将会很快耗尽。


数据库访问

   存取数据库将会很快地减慢程序,但是没有数据库,许多站点也不行。不要使用内植的SQL语句来存取数据库,你可
以通过使用存储过程来访问数据库,这将会赢得很大的程序性能,而且,也非常得灵活。使用存储过程,并配合ActiveX
Data Objects(ADO),就能最大程度地控制存储过程如何输出。

   确认数据库经过了索引,因为这将直接影响到应用程序的整体性能。同时,注意在数据库上运行更新统计程序,从而
更好地跟踪数据的分布。注意,一些数据库,比如MS Access,不适于企业级应用,而SQL Server 7.0或者Oracle更适于做
这些。

   让SQL做设计好的工作,包括对数据进行计算、加入、排序和分组。不要用其他语言写这些功能,可以编写一个查询
来完成。

   任何要计算的字段就是下面所示的简单语法:

   SELECT count(*) FROM publishers WHERE state='NY'

   如果要计算一个特殊字段,必须先按那个字段分组,否则,将不会工作:

   SELECT count(city),city FROM publishers GROUP BY city

   接着确定排序方法:

   SELECT * FROM TableName WHERE FieldName >50 OR FieldName< 100 ORDER BY FieldName2, FieldName3

   仍然使用ODBC系统或者文件DSN来连接数据库,或者使用很快的OLEDB技术来连接。使用后者,当移动Web文件时,不
再需要修改配置。

   OLEDB位于应用程序与ODBC层之间。在ASP页面中,ADO就是位于OLEDB之上的程序。调用ADO时,首先发送给OLEDB,然
后再发送给ODBC层。可以直接连接到OLEDB层,这么做后,将提高服务器端的性能。怎么直接连接到OLEDB呢?

   如果使用SQLServer 7,使用下面的代码做为连接字符串:

strConnString = "DSN='';DRIVER={SQL SERVER};" & _
                "UID=myuid;PWD=mypwd;" & _
                "DATABASE=MyDb;SERVER=MyServer;"

   最重要的参数就是“DRIVER=”部分。如果你想绕过ODBC而使用OLEDB来访问SQL Server,使用下面的语法:

strConnString ="Provider=SQLOLEDB.1;PassWord=mypassword;" & _
               "Persist Security Info=True;User ID=myuid;" & _
               "Initial Catalog=mydbname;" & _
               "Data Source=myserver;Connect Timeout=15"

   为什么这很重要

   现在你可能奇怪为什么学习这种新的连接方法很关键?为什么不使用标准的DSN或者系统DSN方法?好,根据Wrox在他
们的ADO 2.0程序员参考书籍中所做的测试,如果使用OLEDB连接,要比使用DSN或者DSN-less连接,有以下的性能提高表
现:

   性能比较
SQL Access
  OLEDB DSN   OLEDB DSN
连接时间: 18 82 连接时间: 62 99
重复1,000个记录的时间: 2900 5400 重复1,000个记录的时间: 100 950

   这个结论在Wrox的ADO 2.0程序员参考发表。时间是以毫秒为单位,重复1,000个记录的时间是以服务器油标的方式
计算的。

   ● 只有可能,就使用客户端脚本对用户输入进行验证,以此来最小化HTTP请求的循环操作。

   如果浏览器具备执行javaScript或其他脚本的能力,请充分应用,从而解放服务器端的资源。

   下面的VBScript脚本在用户的浏览器端运行,检查用户信息,然后再提交给服务器:

< SCRIPT LANGUAGE="VBScript" >
< !--
Sub btnEnter_OnClick
  Dim TheForm
  Set TheForm = Document.MyForm
  If IsNumeric(TheForm.Age.Value) Then    
    TheForm.submit
  Else
    Msgbox "Please enter a numerical age."
  End if
End Sub
//-- >
< /SCRIPT >

< FORM  method="POST" name=MyForm  action="myfile.asp"   >  
   Name: < INPUT typr="text" name="Name"  >
   Age: < INPUT type="text" name="Age"  >
   < INPUT type="button" name="btnEnter"  value="Enter" >
< /FORM >

   ● 使用局部变量,而不要使用全局变量

   因为局部变量可以很快地被ASP脚本引擎所存取,整个名字空间不必被搜索。避免重定义数组,在数组初始化时就分
配足够的尺寸,会大大地提高效率。这么做可能浪费一些内存,但是确赢得了速度,尤其是在服务器有很大的负载时。

   ● 使用< OBJECT > 标记创建对象

   如果需要引用一个实际上可能不被使用的对象,使用< OBJECT >标记来例示它们,而不要用Server.CreateObject。
后者将导致对象立即被创建,而< OBJECT >是当对象被首次引用时才被创建。

   比如,下面的代码演示了使用< OBJECT >标记来创建一个应用程序范围内的AD Rotator对象实例:

< OBJECT runat=server scope=application id=MyAds progid="MSWC.AdRotator" >
< /OBJECT >
   然后,就可以在其他页面引用它:

   ● 打开“Option Explicit”

   在VB和VBScript中,你可以不用明确地定义就使用变量。但是打开“明确定义变量”选项,将有助于提高程序性能。
未定义的局部变量是很慢的,因为在变量创建前,整个的名字空间都要搜索,看看是否变量已经存在。所以,请打开
“Option Explicit”,这是一个好的编程习惯。

   ● 慎用 Server.MapPath

   除非必须,不要使用Server.MapPath!相反,如果知道路径,就使用明确的文字路径来表示。使用MapPath,将要求
IIS去取回当前服务器路径,这意味着对IIS一个特殊的请求,从而降低了程序性能。另外的完成这个工作的方法是在局部
变量中保存路径信息,当需要使用它时,服务器就不用再被过度请求。

   检查怎样做

   你可以通过下面的工具来测算服务器性能:Task Manager,NetMon 和 PerfMon。用WCAT (Web Capacity Analysis
Tool)测量服务器的容量。你可以使用WCAT来检查Internet信息服务和网络配置如何响应不同的客户端对内容、数据和HTML
页面的请求。测试的结果可以被用来决定如何最优化服务器和网络配置。

   通过最优化ASP应用程序性能,Web站点应用将会变得很快,最终做到:当不需要时,就不需要去做影响性能的点击。

   总结

   当谈到ASP性能时,要涉及到许多方面,本文已经讨论了一些。但是,对于每个具体的应用,应该有单独的考虑,并
不是这里讨论的技巧都能很合适地满足。



关注此文的读者还看过:
·2012-5-21 16:55:26 自动清空站点目录下所有文件
·2012-5-21 16:54:59 ASP实现多语言支持
·2012-5-21 16:50:54 通过web.config配置数据库连接池
·2012-5-21 16:49:49 Android Map开发基础知识学习笔记
·2012-5-21 16:45:38 让asp立即输出缓存(Response.flush),实时显示进度
·2012-5-21 16:43:54 构建你的网站新闻自动发布系统之三
·2012-5-21 16:43:23 图片切换(滤镜IE Only)
·2012-5-21 16:42:33 5个实用的ASP网站功能(GIB5)
·2012-5-21 16:42:29 ASP中取得图片宽度和高度的类(无组件)
站长推荐 PS笔刷下载 在线翻译 系统进程 广告代码
  发表评论
姓 名: 验证码:
内 容:
教程搜索服务
ASP源码推荐
·天天网络商城 v2.0
·秋忆工作室在线文件管理器 v4.4
·社区天地图文系统 v1.0
·开源CMS 全套办公系统
·昌舜超级订单系统 v1.0
·北回归线精美整站 v1.0 修正版
·SipoAutoSaver V3.0 网站通用草
·小培设计(培培家园)—蓝色清爽型
·中国分类信息网[商业正式版]
·动网论坛Dvbbs8.3简洁修改版
·去听音乐吧留言本 v1.2
·乐铺网店系统免费普及版 v3.41
项目外包信息
·汽车配件网站制作 50000元
·整站SEO优化
·课件门户网程序
·求长期合作网站设计制作高手
·公司网站重新改版 8000元
·asp企业网站小改动
·网站flash片头
·文化传播公司网站设计稿
·UI界面设计
·产品外观改版设计 15000元
·照明灯具网站设计 10000元
·求长期合作网站设计制作高手
·做B2C网站 20000元
·Android或QT软硬件平台设计(工
·网站首页FLASH
发布信息 浏览信息
邮件订阅服务
输入你的邮件地址,你将不会错过任何关于<ASP技巧>的内容


网络编程文章分类
ASP教程
ASP实例
ASP技巧
ASP文摘
PHP教程
PHP技巧
PHP实例
PHP文摘
JSP教程
JSP技巧
JSP实例
JSP文摘
ASP.NET教程
ASP.NET技巧
ASP.NET实例
ASP.NET应用
xml教程
xsl教程
xml技巧
C#教程
C#应用
Delphi教程
Perl教程
Shell教程
Ajax教程
Visual Basic教程
Java教程
J2EE/J2ME教程
C/C++教程
移动解决方案
移动短信技术
移动行业动态
软件工程
WordPress
Android开发
站长工具:Google PR查询|Alexa排名查询|网站速度测试|CSS在线编辑器|OPEN参数生成器|弹出式窗口代码产生器|密码登录生成器|在线按钮生成器|Meta标签生成器|邮箱图标在线生成|多色彩特效字代码生成器|网页代码调试器|在线FTP登陆|Flash取色器|配色代码对照表|配色辞典|CSS生成器|CSS在线压缩|广告代码|框架网页代码生成器|js/vbs加密|md5加密|进制转换|UTF-8 转换工具|在线调色板|Html转换js|Html转换asp|Html转换php|Html转换perl
实用工具:汉字翻译拼音|拼音字典|在线翻译|天气预报|火星文|在线网速测试|符号对照表|个税计算|理财工具|黄金价格|购房银行按揭利率计算|汇率查询|经典小工具|汉字简繁转换|普通单位换算|公制单位换算|生辰老黄历|国内电话区号|国家代码与域名缩写|文字加密解密|元素周期表|健康查询|世界时间|全国各地车牌查询|全国车辆交通违章查询|万年历|二十四节气|汉字横竖排版|手机号码查询|计算器|ip搜索|酒店预订|机票预订
广告刊登 | 版权声明 | 联系我们 | 加入收藏 | RSS订阅
Copyright © 2000-2012 www.knowsky.com All rights reserved | 沪ICP备05001343号