最优化ASP程序性能

来源:互联网  作者:佚名
摘要:ActiveServerPages可以让动态页面很快地执行,但是,在代码中和数据库的连接上加入一些技巧,就能让程序更快地执行。这是一篇关于如何精制脚本程序以及ASP特征来达到最大速度的文章。任何在用户点击按钮到在屏幕上出现结果间延迟都会让用户茫然,对于一个商业…

分散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"

【相关文章】好搜一下
韩国宽带网速全球最快!中国名列77位

韩国宽带网速全球最快!中国名列77位

近日美国互联网流量监测机构Ookla发布了最新的全球宽带服务统计数据,该报告显示…