二十八條改善 ASP 效能和外觀的技巧 1-6(From Ms China)——七月份的文章,好像還沒人轉過

來源:互聯網
上載者:User
技巧|效能 二十八條改善 ASP 效能和外觀的技巧 Len Cardinal,進階顧問,Microsoft Consulting Services George V. Reilly Microsoft IIS Performance Lead 改編自Nancy Cluts 的文章 開發人員技術工程師 Microsoft Corporation 2000 年 4 月 摘要:本文介紹最佳化 ASP 應用程式和 VBScript 的技巧。

引言

  • 效能是一個特徵。您必須預先設計效能,否則您以後就得重寫應用程式。就是說,有哪些好的策略可使 Active Server Pages (ASP) 應用程式效能達到最佳? 本文介紹了最佳化 ASP 應用程式和 Visual Basic® Scripting Edition (VBScript) 的技巧。本文討論了許多陷阱。本文列出的建議已經在 http://www.microsoft.com 和其它網站中進行了測試,效果十分顯著。本文假定您已經對 ASP 開發,包括 VBScript 和/或 JScript、ASP Application、ASP Session 和其它 ASP 固有對象(RequestResponseServer)有了基本瞭解。 通常,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 ApplicationSession 對象為將資料緩衝在記憶體中提供了方便的容器。您可以將資料指派到 ApplicationSession 對象中,這些資料在 HTTP 調用之間保留在記憶體中。Session 資料是按每個使用者分別儲存的,而 Application 資料則在所有使用者之間共用。 什麼時候將資料裝載到 Application 或 Session 中呢?通常,資料是在啟動 Application 或 Session 時裝載。要在 Application 或 Session 啟動過程中裝載資料,應將適當的代碼分別添加到 Application_OnStart() 或 Session_OnStart() 中。這些函數應在 Global.asa 中,如果沒有,則可以添加這些函數。還可以在第一次需要時裝載該資料。為此,在 ASP 頁中添加一些代碼(或編寫一個可重複使用的指令碼函數),以檢查資料是否存在,如果不存在,就裝載資料。這是一個傳統的效能技術,稱為“惰性計算” - 在您知道需要某一個值以前不計算該值。例如: 可以為所需要的每個資料區塊編寫類似的函數。 應以什麼格式儲存資料?可以儲存任何變體類型,因為所有指令碼變數都是變體型。例如,您可以儲存字串、整數或數組。通常,您將以這些變數類型之一儲存 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 = ?? & 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 & ? ? & fldName & ?? & vbCrLf rs.MoveNext Loop s = s & ?? & 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 頁來更新資料。或者,您可以通過函數定期自動重新整理資料。下面例子儲存帶有快取資料的時間戳記,並隔一段時間後重新整理資料。 Session[/b] 或 Application 對象中緩衝大的數組不是一個好的做法。在訪問數組的任何元素之前,指令碼語言的文法要求必須臨時複製整個數組。例如,如果將由字串組成的有 100,000 個元素的數組(該數組將美國郵遞區號映射到當地的氣象站)緩衝在 Application 對象中,ASP 必須先將所有的 100,000 個氣象站複製到臨時數組中,然後才能提取一個字串。在這種情況下,用自訂方法建立一個自訂群組件來儲存氣象站 - 或使用一個詞典組件會更好。 再警告大家一下,不要將嬰兒與洗澡水一起倒掉:數組能快速查尋和儲存在記憶體中是鄰近的關鍵資料對。索引一個詞典比索引一個數組要慢得多。應針對您的實際情況,選擇提供最佳效能的資料結構。

    技巧 3:將資料和 HTML 緩衝在 Web 服務器的磁碟上

    有時,資料可能太多,無法都緩衝在記憶體中。“太多”只是一個說法,這要看您想消耗多少記憶體,以及需緩衝的項目數和檢索這些項目的頻率。在任何情況下,如果資料太多而無法都緩衝在記憶體中,則考慮將資料以文本或 XML 檔案快取在 Web 服務器的硬碟上。可以同時將資料緩衝在磁碟和記憶體中,為您的網站建立最適宜的緩衝策略。 注意當測量單個 ASP 頁的效能時,檢索磁碟上的資料可能不一定要比從資料庫檢索資料更快。但緩衝會降低資料庫和網路上的負載。在高負載的情況下,這樣做可大大改善總體輸送量。當緩衝開銷很大的查詢結果(如多表聯結或複合預存程序)或大的結果集時,這是非常有效。與往常一樣,要測試一下幾種方案的優劣。 ASP 和 COM 提供一些建立基於磁碟的緩衝方案的工具。ADO 記錄集 Save()Open() 函數儲存和裝載磁碟中的記錄集。可以使用這些方法重新編寫上面 Application 資料緩衝技巧中的程式碼範例,用檔案的 Save() 代替寫到 Application 對象中的代碼。 有一些其它組件可以用於檔案:
    • Scripting.FileSystemObject 可使您建立、讀和寫檔案。
    • 與 Internet Explorer 一起提供的 Microsoft® XML 解析器 (MSXML) 支援儲存和裝載 XML 文檔。
    • LookupTable 對象(例如,用在 MSN 上)是從磁碟裝載簡單列表的最好選擇。
    最後,應考慮將資料的表示緩衝在磁碟上,而不是資料本身。預先轉換的 HTML 可以用 .htm 或 .asp 檔案儲存體在磁碟上,超級連結可以直接指向這些檔案。可以使用商用工具,如 XBuilder,或 Microsoft® SQL Server™ Internet 發布功能將產生 HTML 的過程自動化。或者,您可以將 HTML 程式碼片斷放在 .asp 檔案中。還可以使用 FileSystemObject 從磁碟讀取 HTML 檔案,或使用 XML 儘早轉換。

    技巧 4:避免將非敏捷的組件緩衝在 Application 或 Session 對象中

    儘管將資料緩衝在 Application

相關文章

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