二十八條改善 ASP 效能和外觀的技巧(1-7)

來源:互聯網
上載者:User
技巧|效能 二十八條改善 ASP 效能和外觀的技巧
Len Cardinal,進階顧問,Microsoft Consulting Services George V. Reilly
Microsoft IIS Performance Lead

改編自Nancy Cluts 的文章 開發人員技術工程師
Microsoft Corporation
2000 年 4 月

摘要:本文介紹最佳化 ASP 應用程式和 VBScript 的技巧。

目錄
技巧 1:將經常使用的資料緩衝在 Web 服務器上
技巧 2:將經常使用的資料緩衝在 Application 或 Session 對象中
技巧 3:將資料和 HTML 緩衝在 Web 服務器的磁碟上
技巧 4:避免將非敏捷的組件緩衝在 Application 或 Session 對象中
技巧 5:不要將資料庫連接緩衝在 Application 或 Session 對象中
技巧 6:合理地使用 Session 對象
技巧 7:將代碼封裝在 COM 物件中
引言
效能是一個特徵。您必須預先設計效能,否則您以後就得重寫應用程式。就是說,有哪些好的策略可使 Active Server Pages (ASP) 應用程式效能達到最佳?

本文介紹了最佳化 ASP 應用程式和 Visual Basic? Scripting Edition (VBScript) 的技巧。本文討論了許多陷阱。本文列出的建議已經在 http://www.microsoft.com 和其它網站中進行了測試,效果十分顯著。本文假定您已經對 ASP 開發,包括 VBScript 和/或 JScript、ASP Application、ASP Session 和其它 ASP 固有對象(Request、 Response 和 Server)有了基本瞭解。

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

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

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

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

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

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

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

<%
Function GetEmploymentStatusList
Dim d
d = Application(?EmploymentStatusList?)
If d = ?? Then
' FetchEmploymentStatusList function (not shown)
' fetches data from DB, returns an Array
d = FetchEmploymentStatusList()
Application(?EmploymentStatusList?) = d
End If
GetEmploymentStatusList = d
End Function
%>


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

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

' Get Recordset, return as an Array
Function FetchEmploymentStatusList
Dim rs
Set rs = CreateObject(?ADODB.Recordset?)
rs.Open ?select StatusName, StatusID from EmployeeStatus?, _
?dsn=employees;uid=sa;pwd=;?
FetchEmploymentStatusList = rs.GetRows() ? Return data as an Array
rs.Close
Set rs = Nothing
End Function


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

' Get Recordset, return as HTML Option list
Function FetchEmploymentStatusList
Dim rs, fldName, s
Set rs = CreateObject(?ADODB.Recordset?)
rs.Open ?select StatusName, StatusID from EmployeeStatus?, _
?dsn=employees;uid=sa;pwd=;?
s = ?<select name=??EmploymentStatus??>? & vbCrLf
Set fldName = rs.Fields(?StatusName?) ' ADO Field Binding
Do Until rs.EOF
' Next line violates Don't Do String Concats,
' but it's OK because we are building a cache
s = s & ? <option>? & fldName & ?</option>? & vbCrLf
rs.MoveNext
Loop
s = s & ?</select>? & vbCrLf
rs.Close
Set rs = Nothing ' See Release Early
FetchEmploymentStatusList = s ' Return data as a String
End Function


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

必須將 ADO 標記為自由線程
必須使用中斷連線的記錄集。
如果不能保證滿足這兩個要求,則不要緩衝 ADO 記錄集。在下面的“非敏捷組件”和“不要緩衝串連”技巧中,我們將討論將 COM 物件儲存在 Application 或 Session 範圍中的危險性。

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

<%
' error handing not shown...
Const UPDATE_INTERVAL = 300 ' Refresh inter



相關文章

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 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。