欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

最大限度優(yōu)化你的Asp性能

admin
2010年8月19日 23:47 本文熱度 3304
    ASP 能快速執(zhí)行你的動(dòng)態(tài)網(wǎng)頁(yè),但你還可以通過(guò)緊縮代碼和數(shù)據(jù)庫(kù)連接以使它們執(zhí)行更快。這是一篇關(guān)于怎樣精簡(jiǎn)代碼和Asp 特征以獲得最快執(zhí)行速度的詳細(xì)文章。對(duì)于一個(gè)急燥的用戶來(lái)說(shuō),任何在按下用戶按鈕到結(jié)果出現(xiàn)在它們的屏幕之間的延遲可能意味著它們會(huì)轉(zhuǎn)到瀏覽其它的站點(diǎn)?假如你的是商業(yè)站點(diǎn),這有可能意味著失去潛在的銷售。
我們沒(méi)有任何辦法控制用戶的帶寬,但我們的確能通過(guò)優(yōu)化Asp 站點(diǎn)來(lái)獲得最佳的性能。大部分潛在性能的提升是通過(guò)系統(tǒng)改變而不是緊縮代碼,一個(gè)不合適的想法是,一旦遇到系統(tǒng)效率問(wèn)題,就向系統(tǒng)管理者提意見(jiàn)要其升級(jí)系統(tǒng)。
    首先,哪個(gè)因素可能影響Asp的性能?很不幸,有很多因素?下面這些只是其中的一部分:

    可用帶寬
    服務(wù)器上的處理器和其它硬件的速度
   在服務(wù)器上運(yùn)行的其它程序(比如象那些OpenGL屏幕保護(hù)程序!)
   數(shù)據(jù)庫(kù)連接模式,連接池,數(shù)據(jù)庫(kù)系統(tǒng)本身(比如Oracle優(yōu)于Sql Server,Sql server優(yōu)于Access)
   所使用的語(yǔ)言
   存儲(chǔ)過(guò)程優(yōu)于行式Sql語(yǔ)句
   使用編譯組件而不是VB或JavaScript,好的Asp編程經(jīng)驗(yàn),比如錯(cuò)誤處理等

   一些以上的因素可能已經(jīng)被有IIS 知識(shí)經(jīng)驗(yàn)的開(kāi)發(fā)者普遍留意到了,但其它的可能對(duì)于他們來(lái)說(shuō)是十分復(fù)雜的問(wèn)題。在這篇文章里, 將試著解釋所有影響Asp性能的每個(gè)因素,讓我們看一看那些在我們刮胡子的幾毫秒內(nèi)就能做到的主要事情。

    ASP腳本大小
    你是腳本頁(yè)(還有其它頁(yè)面)是不是比必須的長(zhǎng)度要長(zhǎng)?這是一開(kāi)始執(zhí)行就會(huì)降低Asp 性能的東西。ASP 腳本在用來(lái)獲取信息和格式化輸出的時(shí)候是十分有用的,但腳本也是逐行解釋執(zhí)行,所以你的腳本越長(zhǎng),執(zhí)行它的時(shí)間也就越長(zhǎng)。
如果你的腳本很龐大,怎么做才能減少腳本的長(zhǎng)度呢?這里有幾點(diǎn)建議:
你可以將它們轉(zhuǎn)換成服務(wù)器端組件,也就是說(shuō),做成VB動(dòng)態(tài)鏈接庫(kù)DLL或者通過(guò)先進(jìn)的Windows編程語(yǔ)言或適當(dāng)?shù)腃OM 接口語(yǔ)言將它轉(zhuǎn)換成未編譯組件?并且在服務(wù)器端注冊(cè)它們。有關(guān)的快速指南可以在
    http://www.webdevelopersjournal.com/articles/activex_for_asp.html找到。對(duì)一個(gè)寫得好的ActiveX 組件進(jìn)行編譯不但能大幅度提高性能,還可以保護(hù)你的軟件(腳本),尤其當(dāng)你將你的Asp站點(diǎn)發(fā)布在第三方主機(jī)上的時(shí)候。
因?yàn)槟_本是逐行解釋執(zhí)行的,所以剔除多余的腳本或建立更高效率的腳本能夠改進(jìn)性能。如果你在單個(gè)Asp 文件中有數(shù)百行的代碼,可能這樣做你能很好地劃分使用者,買賣和數(shù)據(jù)服務(wù)。事實(shí)上,如果你這樣做,可能會(huì)找出一些冗余的代碼:如果你需要輸出幾個(gè)表格,你可以編寫一個(gè)通用函數(shù)來(lái)輸出一個(gè)表格,只是多次調(diào)用它。
    在講述Asp 腳本的大小問(wèn)題的時(shí)候,不得不提及包含文件的大小。當(dāng)你使用一個(gè)包含文件的時(shí)候,整個(gè)包含文件被裝入,當(dāng)包含文件被包含的時(shí)候,相當(dāng)于在Asp 文件本身寫下那部分代碼。因此,如果你在一個(gè)冗長(zhǎng)的包含文件里定義了很多通用的方法和定義,要明白到在你包含該文件的時(shí)候,不管你要不要用到里面的每個(gè)方法和定義,它都是被整個(gè)裝入的。ASP 緩存全部的展開(kāi)代碼,這會(huì)降低查找效率在這種情況下,包含文件必須被分割成更小的,模塊化的文件。也要明白到包含文件被服務(wù)器視為單獨(dú)的頁(yè)面請(qǐng)求,使用太多的包含文件會(huì)影響下載時(shí)間。

<!-- #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?'調(diào)用過(guò)程Main
</SCRIPT>

    假如你的腳本冗長(zhǎng)的話,請(qǐng)使用Response.IsClientConnected。這意味著在客戶端不再連接到服務(wù)器的時(shí)候,你的服務(wù)器CPU能避免循環(huán)等待。

<%
'檢查客戶端是否仍在連接
If Not Response.IsClientConnected Then
'仍然連接著,處理程序
Else
'斷開(kāi)
End If
%>

Interspersing ASP and HTML
    每個(gè)人都這樣做?當(dāng)我們輸出表格的時(shí)候,我們會(huì)在ASP 和HTML代碼間轉(zhuǎn)換,而這是一個(gè)不好的習(xí)慣。例如:

<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="">Homepage</A>
<%
RS.MoveNext
WEND
%>
</BODY>
</HTML>
另一個(gè)普遍的例子是使用IF語(yǔ)句的時(shí)候:

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

在這些情況下,腳本性能能通過(guò)將服務(wù)器端腳本寫到一起來(lái),而用Response.write產(chǎn)生Html代碼來(lái)提高性能。比如:

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

    在大的腳本和很多腳本的情況下,你將能看到性能的提高。注意這里盡量避免了使用<%標(biāo)記,這樣就能提高性能,ASP不需在執(zhí)行腳本的時(shí)候計(jì)算字符的Ascii碼。

Session狀態(tài)
    無(wú)庸置疑地,在Asp中能夠通過(guò)Session維持某個(gè)狀態(tài)的能力是十分強(qiáng)大的特色。然而,它會(huì)影響你的性能。明顯地,你的站點(diǎn)的可伸縮性性變成了另一個(gè)問(wèn)題,如果限制Session的使用的話。然而,session會(huì)為每個(gè)用戶消耗服務(wù)器資源。
如果你不使用session 變量,或事實(shí)上你不必使用?使用隱藏表單域,在數(shù)據(jù)庫(kù)中保存數(shù)據(jù),查詢字符串是不是其中的竅門?所以你應(yīng)該禁止Session狀態(tài)。你可以使用下面的聲明禁止使用session:

@EnableSessionState = False

    這樣,ASP將不再檢查session信息。

     如果你不得不依賴于session狀態(tài),應(yīng)該避免在session對(duì)象中存放大量的數(shù)據(jù)。IIS中的session在客戶端的HTTP cookie可用的時(shí)候就會(huì)保持,導(dǎo)致被session占用的內(nèi)存在session 終止或超時(shí)前一直被占用。這樣,如果很多用戶同時(shí)使用你的程序的時(shí)候,你的服務(wù)器資源可能會(huì)耗盡。

數(shù)據(jù)庫(kù)訪問(wèn)
     數(shù)據(jù)庫(kù)訪問(wèn)是必須的麻煩?訪問(wèn)數(shù)據(jù)庫(kù)將會(huì)激烈地減慢你的程序,但很顯然,如果沒(méi)有數(shù)據(jù)庫(kù),很多站點(diǎn)將變得毫無(wú)價(jià)值可言。但通過(guò)存儲(chǔ)過(guò)程訪問(wèn)數(shù)據(jù)庫(kù)來(lái)代替使用嵌入式Sql 語(yǔ)句,你可以提升潛在的性能。通過(guò)使用存儲(chǔ)過(guò)程和ActiveX Data Objects (ADO),它們亦同樣擁有良好的靈活性。盡可能從存儲(chǔ)過(guò)程來(lái)輸出數(shù)據(jù)。

    確認(rèn)你的數(shù)據(jù)庫(kù)具有索引,因?yàn)檫@樣能直接提高你的程序的效率。同樣,盡量在你的數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行更新統(tǒng)計(jì)(Update Statistics) 以幫助追蹤你的數(shù)據(jù)分發(fā),這樣,你的數(shù)據(jù)庫(kù)就能夠基于這些信息來(lái)改造查詢執(zhí)行。注意一些數(shù)據(jù)庫(kù)比如MS Access,是不是真正能在企業(yè)級(jí)程序中接受?SQL Sever 7.0或者Oracle是一個(gè)更好的賭注。
讓SQL象它被設(shè)計(jì)的那樣工作,它能count(統(tǒng)計(jì)),連接(join),排序(sort)和group 數(shù)據(jù)。當(dāng)你能夠?qū)懗鲆粋€(gè)查詢語(yǔ)句來(lái)做這些東西的時(shí)候,就不要自己用其它語(yǔ)言來(lái)實(shí)現(xiàn)。
下面是一個(gè)統(tǒng)計(jì)所有列的最簡(jiǎn)單的語(yǔ)法:

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

如果你統(tǒng)計(jì)一個(gè)指定的列,你必須使用group by語(yǔ)句來(lái)分組該列,否則它不會(huì)工作:

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

分類返回的數(shù)據(jù):

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

    使用Odbc還是文件DSN連接數(shù)據(jù)庫(kù)?使用快速的OLEDB Provider技術(shù)連接你的數(shù)據(jù)庫(kù)而不是使用DSN連接。不再需要懇求你的ISP(或數(shù)據(jù)庫(kù)管理員/網(wǎng)管)為你建立一個(gè)系統(tǒng)DSN,當(dāng)你移走Web文件的時(shí)候,亦不需要改變配置。

    OLEDB 介于ODBC層和應(yīng)用程序之間。在你的ASP 頁(yè)面中,ADO介于ODEDB之上的“應(yīng)用程序”。你的ADO調(diào)用首先被送到OLEDB,接著被送到ODBC層。然而,你可以直接連接到OLEDB 層,并且如果你這樣做的話,你就能看到服務(wù)器端性能的提高。然而,怎樣直接連接到OLEDB?
如果你使用SQLServer 7,使用下面的連接代碼連接數(shù)據(jù)庫(kù):

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

最重要的參數(shù)是DRIVER=部分。如果你要繞過(guò)ODBC而使用通過(guò)使用OLEDB 連接SQL Server(這是更快的連接),請(qǐng)使用下面的語(yǔ)法:

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

有什么不對(duì)的地方嗎?
    現(xiàn)在你可能會(huì)覺(jué)得有點(diǎn)奇怪:我們?cè)谶@個(gè)新的連接方法中的要點(diǎn)是什么呢?為什么不使用標(biāo)準(zhǔn)DSN-less/System DSN途徑?呵,根據(jù)Wrox 在他的著作《ADO 2.0 Programmer's Reference》中測(cè)試的結(jié)果表明,如果你使用OLEDB連接和DSN或者DSN-less連接方法比較,你會(huì)發(fā)現(xiàn)有下面的改進(jìn):

性能對(duì)比:
SQL Access
OLEDBDSNOLEDBDSN
連接時(shí)間:18?82?連接時(shí)間:62?99
查詢1,000條記錄時(shí)間:29005400查詢1,000條記錄時(shí)間: 100950

注釋:這個(gè)結(jié)果在Wrox的《ADO 2.0 Programmer's Reference》一書的第232和233頁(yè)可以查到。時(shí)間的單位是毫秒,查詢1,000記錄時(shí)間是通過(guò)服務(wù)器端游標(biāo)計(jì)算出來(lái)的(當(dāng)使用客戶端游標(biāo)的時(shí)候,OLEDB與DSN記錄集的性能之間的差別不大)。

ASP譯碼問(wèn)題:
盡可能在客戶端確認(rèn)用戶輸入來(lái)減少HTTP來(lái)回請(qǐng)求的數(shù)量。如果瀏覽器有支持JavaScript或其它腳本的能力,使用它們的力量以釋放更多的服務(wù)器資源。
下面的VBScript運(yùn)行于客戶端瀏覽器,在提交到你的服務(wù)器之前,用來(lái)驗(yàn)證用戶信息:

<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>

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

    使用局部變量,避免使用全局變量。局部變量比全局變量更快地被Asp 腳本引擎存取,因?yàn)椴恍杷阉髡麄€(gè)名稱域。避免改變數(shù)組定義。在第一次初始化的時(shí)候就簡(jiǎn)單分配足夠的大小效率更高。在這種情況下,你可能會(huì)浪費(fèi)一些內(nèi)存,但你獲得了速度的優(yōu)勢(shì)。在服務(wù)器負(fù)載重的時(shí)候這個(gè)技術(shù)是顯然易見(jiàn)有效的。

    如果你需要引用不一定要用到的對(duì)象,那么最好使用<OBJECT>標(biāo)記而不是用 Server.CreateObject方法。 使用Server.CreateObject引起對(duì)象立即被建立,反之,<OBJECT>標(biāo)記則不會(huì)這樣立即建立對(duì)象如果使用<object>定義后不使用該對(duì)象,你不會(huì)浪費(fèi)資源。

例如:下面的例子是一個(gè)使用<OBJECT>標(biāo)記建立一個(gè)application-scope廣告輪 Ad Rotator對(duì)象實(shí)
例:

<OBJECT runat=server scope=Application id=MyAds progid="MSWC.AdRotator">
</OBJECT>

在存儲(chǔ)該Ad Rotator對(duì)象進(jìn)Application后,你可以在任何程序的頁(yè)面中用下面的語(yǔ)法訪問(wèn)該對(duì)象

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

打開(kāi)'Option Explicit'開(kāi)關(guān)。在VB和VBScript 中,你可以在沒(méi)有顯式聲明的情況下使用變量。但打開(kāi)這個(gè)選項(xiàng)可以鑒別用定義變量,這樣可以很好地書寫變量,并能幫助提高性能。未定義的局部變量會(huì)變慢,因?yàn)樵诮⑺埃Q空間必須被搜遍后才知道變量是否存在。擺脫它,使每個(gè)變量清楚地定義(先定義后使用)。

這是一個(gè)好習(xí)慣,it may trap typos, 這樣更快。


    除非你真正需要使用,否而不要使用Server.MapPath方法。如果你知道真實(shí)路徑就使用真實(shí)路徑。使用MapPath需要IIS找回現(xiàn)時(shí)服務(wù)器路徑,這意味著得向服務(wù)器發(fā)一個(gè)特殊的請(qǐng)求,也就意味著降低了性能。另一個(gè)方法是將路徑存放到局部變量中,在需要的時(shí)候使用,這樣就不需要服務(wù)器多次查找。

    檢查你自己是怎么做的
    你可以通過(guò)工具來(lái)測(cè)量你的系統(tǒng)性能,比如系統(tǒng)性能監(jiān)視器,NetMon和PerfMon。測(cè)試web性能可以用WCAT (Web Capacity Analysis Tool)。使用WCAT,你可以測(cè)試你的IIS服務(wù)器和網(wǎng)絡(luò)配置響應(yīng)各種各樣的客戶請(qǐng)求,數(shù)據(jù)或HTML頁(yè)面的能力。這些測(cè)試結(jié)果能夠被用來(lái)作為優(yōu)化你的服務(wù)器和網(wǎng)絡(luò)配置的指導(dǎo)。WCAT是專門設(shè)計(jì)用來(lái)估計(jì)Windows 2000中的因特網(wǎng)服務(wù)(或Windows NT)和IIS 能響應(yīng)的客戶工作量
(仿真)。為了得到更多的信息,請(qǐng)參閱IIS Resource Kit(資源工具包)。那里也有冗長(zhǎng)的WCAT用戶指南在MSDN在線Web sorkshop站點(diǎn)里面有一個(gè)下載鏈接。如果你認(rèn)真對(duì)待你的Asp 性能的話,務(wù)必取得該工具。

   力求最優(yōu)化應(yīng)用程序性能,你的web 應(yīng)用程序會(huì)運(yùn)行更加順暢。如果不是真正需要,就不要影響服務(wù)器的性能。

    摘要:
上面介紹了有關(guān)ASP性能的資料,有很多因素影響Asp的性能,這里只討論了其中的一部分。作為最終的想法,不要認(rèn)為你能夠處理好所有的因素,你的ASP 性能還是有必要提高的。你發(fā)布的每個(gè)應(yīng)用程序必須個(gè)別進(jìn)行考慮,所有以上的技巧并不是適合每個(gè)Asp程序。

該文章在 2010/8/19 23:47:50 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved