二十八條改善 ASP 效能和外觀的技巧

來源:互聯網
上載者:User
技巧|效能

引言

效能是一個特徵。您必須預先設計效能,否則您以後就得重寫應用程式。就是說,有哪些好的策略可使ActiveServerPages(ASP)應用程式效能達到最佳?

本文介紹了最佳化ASP應用程式和VisualBasic®ScriptingEdition(VBScript)的技巧。本文討論了許多陷阱。本文列出的建議已經在和其它網站中進行了測試,效果十分顯著。本文假定您已經對ASP開發,包括VBScript和/或JScript、ASPApplication、ASPSession和其它ASP固有對象(RequestResponseServer)有了基本瞭解。

通常,ASP效能主要取決於ASP代碼本身以外的很多因素。我們不在一篇文章中羅列出所有的資訊,在本文結尾處我們列出了與效能有關的資源。這些連結涵蓋了ASP和非ASP主題,包括ActiveX®資料對象(ADO)、元件物件模型(COM)、資料庫和InternetInformationServer(IIS)配置。這些都是我們喜歡的一些連結-一定要去看看。

技巧1:將經常使用的資料緩衝在Web伺服器上

典型的ASP頁從後端資料存放區中檢索資料,然後將結果轉換成超文字標記語言 (HTML)(HTML)。無論資料庫的速度如何,從記憶體中檢索資料總要比從後端資料存放區中檢索資料快得多。從本地硬碟讀取資料通常也比從資料庫中檢索資料更快。因此,通常可以將資料緩衝在Web伺服器上(儲存在記憶體或磁碟中),來提高效能。

緩衝是傳統的以空間換取時間的做法。如果您緩衝的內容正確,那麼您可以看到效能會有顯著的提高。為使緩衝有效,必須儲存那些經常重複使用的資料,且要重新計算這些資料需要(適度)大的開銷。如果緩衝的都是些陳舊的資料,就會造成記憶體浪費。

不經常發生改變的資料是很好的緩衝候選資料,因為您不必擔心隨著時間的遷移該資料與資料庫同步的問題。組合框列表、參考資料表、DHTML片段、擴充標記語言(XML)字串、功能表項目和網站組態變數(包括資料來源名稱(DSN)、Internet協議(IP)地址和Web路徑)都是很好的緩衝候選內容。注意您可以快取資料的“表示”,而不快取資料本身。如果ASP頁很少更改,且緩衝的開銷也很大(例如,整個產品目錄),則應考慮事先產生HTML,而不是在響應每個請求時重新顯示。

應將資料緩衝在哪裡,有哪些緩衝策略?通常,資料緩衝在Web伺服器的記憶體或磁碟中。下兩個技巧講述了這兩個方法。

技巧2:將經常使用的資料緩衝在Application或Session對象中

ASPApplicationSession對象為將資料緩衝在記憶體中提供了方便的容器。您可以將資料指派到ApplicationSession對象中,這些資料在HTTP調用之間保留在記憶體中。Session資料是按每個使用者分別儲存的,而Application資料則在所有使用者之間共用。

什麼時候將資料裝載到Application或Session中呢?通常,資料是在啟動Application或Session時裝載。要在Application或Session啟動過程中裝載資料,應將適當的代碼分別添加到或中。這些函數應在Global.asa中,如果沒有,則可以添加這些函數。還可以在第一次需要時裝載該資料。為此,在ASP頁中添加一些代碼(或編寫一個可重複使用的指令碼函數),以檢查資料是否存在,如果不存在,就裝載資料。這是一個傳統的效能技術,稱為“惰性計算”-在您知道需要某一個值以前不計算該值。例如:

<%
FunctionGetEmploymentStatusList
Dimd
d=Application(?EmploymentStatusList?)
Ifd=??Then
'FetchEmploymentStatusListfunction(notshown)
'fetchesdatafromDB,returnsanArray
d=FetchEmploymentStatusList()
Application(?EmploymentStatusList?)=d
EndIf
GetEmploymentStatusList=d
EndFunction
%>

可以為所需要的每個資料區塊編寫類似的函數。

應以什麼格式儲存資料?可以儲存任何變體類型,因為所有指令碼變數都是變體型。例如,您可以儲存字串、整數或數組。通常,您將以這些變數類型之一儲存ADO記錄集的內容。要從ADO記錄集擷取資料,您可以手工將資料複製到VBScript變數,一次一個欄位。使用一個ADO記錄集持久函數GetRows()、GetString()或Save()(ADO2.5),可加快速度且更容易一些。其詳細情況已超出本文所討論的範圍,但下面給出了一個函數舉例,說明使用返回記錄集資料的一個數組:

'GetRecordset,returnasanArray
FunctionFetchEmploymentStatusList
Dimrs
Setrs=CreateObject(?ADODB.Recordset?)
rs.Open?selectStatusName,StatusIDfromEmployeeStatus?,_
?dsn=employees;uid=sa;pwd=;?
FetchEmploymentStatusList=rs.GetRows()?ReturndataasanArray
rs.Close
Setrs=Nothing
EndFunction

對上面舉例做更進一步改進,可以將HTML緩衝為列表,而不是數組。下面是簡單的樣本:

'GetRecordset,returnasHTMLOptionlist
FunctionFetchEmploymentStatusList
Dimrs,fldName,s
Setrs=CreateObject(?ADODB.Recordset?)
rs.Open?selectStatusName,StatusIDfromEmployeeStatus?,_
?dsn=employees;uid=sa;pwd=;?
s=?<selectname=??EmploymentStatus??>?&vbCrLf
SetfldName=rs.Fields(?StatusName?)'ADOFieldBinding
DoUntilrs.EOF
'NextlineviolatesDon'tDoStringConcats,
'butit'sOKbecausewearebuildingacache
s=s&?<option>?&fldName&?</option>?&vbCrLf
rs.MoveNext
Loop
s=s&?</select>?&vbCrLf
rs.Close
Setrs=Nothing'SeeReleaseEarly
FetchEmploymentStatusList=s'ReturndataasaString
EndFunction

在適當的條件下,可以將ADO記錄集本身緩衝在Application或Session範圍中。有兩個警告:

如果不能保證滿足這兩個要求,則不要緩衝ADO記錄集。在下面的“非敏捷組件”和“不要緩衝串連”技巧中,我們將討論將COMObject Storage Service在Application或Session範圍中的危險性。

當您將資料存放區在Application或Session範圍時,資料將保留在那裡,直到您以編程方式改變它、Session到期或Web應用程式重新啟動為止。如果資料需要更新怎麼辦?要手工強制對Application資料進行更新,您可以訪問只有管理員才可訪問的ASP頁來更新資料。或者,您可以通過函數定期自動重新整理資料。下面例子儲存帶有快取資料的時間戳記,並隔一段時間後重新整理資料。

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。