|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
实现规模效益。与传统的用户拥有硬件软件所有权和使用权以及传统的应用服务商提供一对一的服务模式不同,ASP拥有应用系统所有权,用户拥有使用权,应用系统集中放在ASP的数据中心中,集中管理,分散使用,以一对多的租赁的形式为众多用户提供有品质保证的应用技术服务,实现规模效益。 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功能时,要触及到很多方面,本文已会商了一些。然而,关于每一个详细的使用,应当有独自的思索,并
不是这里会商的技能都能很适合地知足。
缺乏可以共同遵循的行业标准,ASP还处在发展初期,大家对它的理解不同,如产品和服务标准,收费标准等,不利于行业的健康发展。 |
|