只想知道 发表于 2015-1-16 22:54:30

ASP编程:最年夜限制优化你的Asp功能

无法实现跨操作系统的应用。当然这也是微软的理由之一,只有这样才能发挥ASP最佳的能力。可是我却认为正是Windows限制了ASP,ASP的概念本就是为一个能让系统运行于一个大的多样化环境而设计的;功能|优化
ASP能疾速实行你的静态网页,但你还能够经由过程压缩代码和数据库毗连以使它们实行更快。这是一篇关于如何精简代码和Asp特性以取得最快实行速率的具体文章。关于一个急燥的用户来讲,任安在按下用户按钮到了局呈现在它们的屏幕之间的提早大概意味着它们会转到扫瞄别的的站点?假设你的是贸易站点,这有大概意味着得到潜伏的发卖。
我们没有任何举措把持用户的带宽,但我们切实其实能经由过程优化Asp站点来取得最好的功能。年夜部分潜伏功能的提拔是经由过程体系改动而不是压缩代码,一个分歧适的设法是,一旦碰到体系效力成绩,就向体系办理者提定见要其晋级体系。

起首,哪一个要素大概影响Asp的功能?很不幸,有良多要素?上面这些只是个中的一部分:

可用带宽
服务器上的处置器和别的硬件的速率
在服务器上运转的别的程序(好比象那些OpenGL屏幕回护程序!)
数据库毗连形式,毗连池,数据库体系自己(好比Oracle优于SqlServer,Sqlserver优于Access)
所利用的言语
存储历程优于行式Sql语句
利用编译组件而不是VB或JavaScript,好的Asp编程履历,好比毛病处置等

一些以上的要素大概已被有IIS常识履历的开辟者广泛寄望到了,但别的的大概关于他们来讲是非常庞大的成绩。在这篇文章里,将试着注释一切影响Asp功能的每一个要素,让我们看一看那些在我们刮胡子的几毫秒内就可以做到的次要事变。

ASP剧本巨细
你是剧本页(另有别的页面)是否是比必需的长度要长?这是一入手下手实行就会下降Asp功能的器材。ASP剧本在用来猎取信息和格局化输入的时分是非常有效的,但剧本也是逐行注释实行,以是你的剧本越长,实行它的工夫也就越长。
假如你的剧本很复杂,怎样做才干削减剧本的长度呢?这里有几点倡议:
你能够将它们转换成服务器端组件,也就是说,做成VB静态链接库DLL大概经由过程先辈的Windows编程言语或得当的COM接白话言将它转换成未编译组件?而且在服务器端注册它们。有关的疾速指南能够在
http://www.webdevelopersjournal.com/articles/activex_for_asp.html找到。对一个写得好的ActiveX组件举行编译不仅能年夜幅度进步功能,还能够回护你的软件(剧本),特别当你将你的Asp站点公布在第三方主机上的时分。
由于剧本是逐行注释实行的,以是剔除过剩的剧本或创建更高效力的剧本可以改善功能。假如你在单个Asp文件中无数百行的代码,大概如许做你能很好地分别利用者,交易和数据服务。现实上,假如你如许做,大概会找出一些冗余的代码:假如你必要输入几个表格,你能够编写一个通用函数来输入一个表格,只是屡次挪用它。
在报告Asp剧本的巨细成绩的时分,不能不说起包括文件的巨细。当你利用一个包括文件的时分,全部包括文件被装进,当包括文件被包括的时分,相称于在Asp文件自己写下那部分代码。因而,假如你在一个冗杂的包括文件里界说了良多通用的办法和界说,要分明到在你包括该文件的时分,不论你要不要用到内里的每一个办法和界说,它都是被全部装进的。ASP缓存全体的睁开代码,这会下降查找效力在这类情形下,包括文件必需被支解成更小的,模块化的文件。也要分明到包括文件被服务器视为独自的页面哀求,利用太多的包括文件会影响下载工夫。

<!--#includefile="Header.asp"-->
<!--#includefile="Footer.asp"-->
<SCRIPTlanguage="vbscript"runat="server">

SubMain()
WriteHeader
WriteBody
WriteFooter
EndSub

SubWriteBody()
...
EndSub

Main?挪用历程Main
</SCRIPT>

假设你的剧本冗杂的话,请利用Response.IsClientConnected。这意味着在客户端不再毗连到服务器的时分,你的服务器CPU能制止轮回守候。

<%
反省客户端是不是仍在毗连
IfNotResponse.IsClientConnectedThen
仍旧毗连着,处置程序
Else
断开
EndIf
%>

InterspersingASPandHTML
每一个人都如许做?当我们输入表格的时分,我们会在ASP和HTML代码间转换,而这是一个欠好的习气。比方:

<HTML>
<BODY>
<%
SetMyConn=Server.CreateObject("ADODB.Connection")
MdbFilePath=Server.MapPath("sample.mdb")
MyConn.Open"Driver={MicrosoftAccessDriver(*.mdb)};DBQ="&MdbFilePath&";"
SQL_query="SELECT*FROMFriends"
SetRS=MyConn.Execute(SQL_query)
WHILENOTRS.EOF
%>
<LI><%=RS("Name")%>:<AHREF="">Homepage</A>
<%
RS.MoveNext
WEND
%>
</BODY>
</HTML>
另外一个广泛的例子是利用IF语句的时分:

<%
IfNotSession("DBOpen")Then
%>
<H1>Databasenotconnected</H1>
<%
Else
%>
<H1>Databaseopen</H1>
<%
EndIf
%>

在这些情形下,剧本功能能经由过程将服务器端剧本写到一同来,而用Response.write发生Html代码来进步功能。好比:

<%
IfnotSession("DBOpen")Then
Response.Write"<H1>Databasenotconnected</H1>"
Else
Response.Write"<H1>Databaseopen</H1>"
EndIf
%>

在年夜的剧本和良多剧本的情形下,你将能看到功能的进步。注重这里只管制止了利用<%标志,如许就可以进步功能,ASP不需在实行剧本的时分盘算字符的Ascii码。

Session形态
毋庸置疑地,在Asp中可以经由过程Session保持某个形态的才能是非常壮大的特征。但是,它会影响你的功能。分明地,你的站点的可伸缩性性酿成了另外一个成绩,假如限定Session的利用的话。但是,session会为每一个用户损耗服务器资本。
假如你不利用session变量,或现实上你不用利用?利用埋没表单域,在数据库中保留数据,查询字符串是否是个中的秘诀?以是你应当克制Session形态。你可使用上面的声明克制利用session:

@EnableSessionState=False

如许,ASP将不再反省session信息。

假如你不能不依附于session形态,应当制止在session工具中寄存大批的数据。IIS中的session在客户真个HTTPcookie可用的时分就会坚持,招致被session占用的内存在session停止或超时前一向被占用。如许,假如良多用户同时利用你的程序的时分,你的服务器资本大概会耗尽。

数据库会见
数据库会见是必需的贫苦?会见数据库将会剧烈地减慢你的程序,但很明显,假如没无数据库,良多站点将变得毫无代价可言。但经由过程存储历程会见数据库来取代利用嵌进式Sql语句,你能够提拔潜伏的功能。经由过程利用存储历程和ActiveXDataObjects(ADO),它们亦一样具有优秀的天真性。尽量从存储历程来输入数据。

确认你的数据库具有索引,由于如许能间接进步你的程序的效力。一样,只管在你的数据库服务器运转更新统计(UpdateStatistics)以匡助追踪你的数据分发,如许,你的数据库就可以够基于这些信息来改革查询实行。注重一些数据库好比MSAccess,是否是真正能在企业级程序中承受?SQLSever7.0大概Oracle是一个更好的赌注。
让SQL象它被计划的那样事情,它能count(统计),毗连(join),排序(sort)和group数据。当你可以写出一个查询语句来做这些器材的时分,就不要本人用别的言语来完成。
上面是一个统计一切列的最复杂的语法:

SELECTcount(*)FROMpublishersWHEREstate=NY

假如你统计一个指定的列,你必需利用groupby语句来分组该列,不然它不会事情:

SELECTcount(city),cityFROMpublishersGROUPBYcity

分类前往的数据:

SELECT*FROMTableNameWHEREFieldName>50ORFieldName<100ORDERBYFieldName2,FieldName3

利用Odbc仍是文件DSN毗连数据库?利用疾速的OLEDBProvider手艺毗连你的数据库而不是利用DSN毗连。不再必要乞求你的ISP(或数据库办理员/网管)为你创建一个体系DSN,当你移走Web文件的时分,亦不必要改动设置。

OLEDB介于ODBC层和使用程序之间。在你的ASP页面中,ADO介于ODEDB之上的“使用程序”。你的ADO挪用起首被送到OLEDB,接着被送到ODBC层。但是,你能够间接毗连到OLEDB层,而且假如你如许做的话,你就可以看到服务器端功能的进步。但是,如何间接毗连到OLEDB?
假如你利用SQLServer7,利用上面的毗连代码毗连数据库:

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

最主要的参数是DRIVER=部分。假如你要绕过ODBC而利用经由过程利用OLEDB毗连SQLServer(这是更快的毗连),请利用上面的语法:

strConnString="Provider=SQLOLEDB.1;Password=mypassword;"&_
"PersistSecurityInfo=True;UserID=myuid;"&_
"InitialCatalog=mydbname;"&_
"DataSource=myserver;ConnectTimeout=15"

有甚么不合错误的中央吗?
如今你大概会以为有点奇异:我们在这个新的毗连办法中的要点是甚么呢?为何不利用尺度DSN-less/SystemDSN路子?呵,依据Wrox在他的著作《ADO2.0ProgrammersReference》中测试的了局标明,假如你利用OLEDB毗连和DSN大概DSN-less毗连办法对照,你会发明有上面的改善:

功能对照:
SQLAccess
OLEDBDSNOLEDBDSN
毗连工夫:18?82?毗连工夫:62?99
查询1,000笔记录工夫:29005400查询1,000笔记录工夫:100950

正文:这个了局在Wrox的《ADO2.0ProgrammersReference》一书的第232和233页能够查到。工夫的单元是毫秒,查询1,000纪录工夫是经由过程服务器端游标盘算出来的(当利用客户端游标的时分,OLEDB与DSN纪录集的功能之间的不同不年夜)。

ASP译码成绩:
尽量在客户端确认用户输出来削减HTTP往返哀求的数目。假如扫瞄器有撑持JavaScript或别的剧本的才能,利用它们的力气以开释更多的服务器资本。
上面的VBScript运转于客户端扫瞄器,在提交到你的服务器之前,用来考证用户信息:

<SCRIPTLANGUAGE="VBScript">
<!--
SubbtnEnter_OnClick
DimTheForm
SetTheForm=Document.MyForm
IfIsNumeric(TheForm.Age.Value)Then
TheForm.submit
Else
Msgbox"Pleaseenteranumericalage."
Endif
EndSub
//-->
</SCRIPT>

<FORMmethod="POST"name=MyFormaction="myfile.asp">?Name:<INPUTtypr="text"name="Name">
Age:<INPUTtype="text"name="Age">
<INPUTtype="button"name="btnEnter"value="Enter">
</FORM>

利用部分变量,制止利用全局变量。部分变量比全局变量更快地被Asp剧本引擎存取,由于不需搜刮全部称号域。制止改动数组界说。在第一次初始化的时分就复杂分派充足的巨细效力更高。在这类情形下,你大概会华侈一些内存,但你取得了速率的上风。在服务器负载重的时分这个手艺是明显易见无效的。

假如你必要援用纷歧定要用到的工具,那末最好利用<OBJECT>标志而不是用Server.CreateObject办法。利用Server.CreateObject引发工具当即被创建,反之,<OBJECT>标志则不会如许当即创建工具假如利用<object>界说后不利用该工具,你不会华侈资本。

比方:上面的例子是一个利用<OBJECT>标志创建一个application-scope告白轮AdRotator工具实
例:

<OBJECTrunat=serverscope=Applicationid=MyAdsprogid="MSWC.AdRotator">
</OBJECT>

在存储该AdRotator工具进Application后,你能够在任何程序的页面顶用上面的语法会见该工具

<%=MyAds.GetAdvertisement("CustomerAds.txt")%>

翻开OptionExplicit开关。在VB和VBScript中,你能够在没有显式声明的情形下利用变量。但翻开这个选项能够判别用界说变量,如许能够很好地誊写变量,并能匡助进步功能。不决义的部分变量会变慢,由于在创建它之前,称号空间必需被搜遍后才晓得变量是不是存在。挣脱它,使每一个变量分明地界说(先界说后利用)。

这是一个好习气,itmaytraptypos,如许更快。


除非你真正必要利用,否而不要利用Server.MapPath办法。假如你晓得实在路径就利用实在路径。利用MapPath必要IIS找回现时服务器路径,这意味着得向服务器发一个特别的哀求,也就意味着下降了功能。另外一个办法是将路径寄存到部分变量中,在必要的时分利用,如许就不必要服务器屡次查找。

反省你本人是怎样做的
你能够经由过程工具来丈量你的体系功能,好比体系功能监督器,NetMon和PerfMon。测试web功能能够用WCAT(WebCapacityAnalysisTool)。利用WCAT,你能够测试你的IIS服务器和收集设置呼应林林总总的客户哀求,数据或HTML页面的才能。这些测试了局可以被用来作为优化你的服务器和收集设置的引导。WCAT是专门计划用来估量Windows2000中的因特网服务(或WindowsNT)和IIS能呼应的客户事情量
(仿真)。为了失掉更多的信息,请参阅IISResourceKit(资本工具包)。那边也有冗杂的WCAT用户指南在MSDN在线Websorkshop站点内里有一个下载链接。假如你仔细看待你的Asp功能的话,务必获得该工具。

力图最优化使用程序功能,你的web使用程序会运转加倍顺畅。假如不是真正必要,就不要影响服务器的功能。

择要:
下面先容了有关ASP功能的材料,有良多要素影响Asp的功能,这里只会商了个中的一部分。作为终极的设法,不要以为你可以处置好一切的要素,你的ASP功能仍是有需要进步的。你公布的每一个使用程序必需一般举行思索,一切以上的技能并非合适每一个Asp程序。

Thispageisover.
由软件利用主页收拾创作,如要援用,请指明出处,多谢


asp是基于web的一种编程技术,可以说是cgi的一种。它可以完成以往cgi程序的所有功能,如计数器、留言簿、公告板、聊天室等等。

再见西城 发表于 2015-1-20 06:04:31

我认为比较好的方法是找一些比较经典的例子,每个例子比较集中一种编程思想而设计的。

小妖女 发表于 2015-1-26 16:49:44

还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。

飘灵儿 发表于 2015-2-4 16:47:44

尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。

admin 发表于 2015-2-10 04:08:48

弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

仓酷云 发表于 2015-2-28 19:17:28

Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点)

只想知道 发表于 2015-3-10 05:52:38

Session:这个存储跟客户端会话过程的数据,默认20分钟失效

爱飞 发表于 2015-3-17 05:00:14

以HTML语言整合(HTML负责界面上,ASP则负责功能上)形成一个B/S(浏览器/服务器)模式的网页程序。

简单生活 发表于 2015-3-23 19:51:29

我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。
页: [1]
查看完整版本: ASP编程:最年夜限制优化你的Asp功能