技巧 21:啟用浏覽器和代理緩存
默認情況下,asp 禁用浏覽器和代理中的緩存。這將很有意義,因為 ASP 生來就是動態的,具有潛在地對時間敏感的信息。如果有一個不需要對每次查看進行刷新的頁,則應該啟用浏覽器和代理緩存。這使得浏覽器和代理能在某一段時間內,使用某一頁的緩存副本,這時間的長短可以控制。緩存能明顯減輕服務器負荷,使用戶的感受好一些。
哪種動態頁可以緩存?舉例說明:
天氣頁,每 5 分鐘更新一次。
列出新聞的主頁或新聞發布的主頁,每天更新 2 次。
公共基金運營列表,基本的統計數小時更新 1 次。
請注意,使用浏覽器或代理緩存,只有很少的命中被記錄到 Web 服務器上。如果想精確測量所有頁面查看或者張貼廣告,也許不喜歡使用浏覽器和代理緩存。
浏覽器緩存是由 Web 服務器發往浏覽器的 HTTP 截至期限標題控制的。ASP 提供了兩種發送標題的機制。要將頁面設置為在未來某個分鐘數後過期,請設置 Response.Expires 屬性。以下的例子通知浏覽器:內容在 10 分鐘後過期:
<% Response.Expires = 10 %>
設置 Response.Expires 為負數或 0 則禁用緩存。一定要使用較大的負數,例如 -1000 (大於一天),來克服服務器時鐘和浏覽器時鐘之間的差異。第二個屬性 Response.ExpiresAbsolute,允許設置內容過期的指定時間:
<% Response.ExpiresAbsolute = #May 31,2001 13:30:15# %>
如果不想使用 Response 對象設置過期時間,可以將 <META> 標記寫入 HTML,通常寫在 Html 文件的 <HEAD> 內部。一些浏覽器會響應這條指令,但代理不會。
<META HTTP-EQUIV="Expires" VALUE="May 31,2001 13:30:15">
最後,可以標識內容對 HTTP 代理緩存是否有效,請使用 Response.CacheControl 屬性。設置屬性為“Public”,允許代理緩存內容。
<% Response.CacheControl = "Public" %>
默認情況下,該屬性設置為“PRivate”。注意,不應當為顯示某用戶專用數據的頁啟用代理緩存,因為代理也許為屬於其他用戶的用戶頁面服務。
技巧 22:盡可能使用 Server.Transfer 替代 Response.Redirect
Response.Redirect 通知浏覽器,請求一個不同的頁面。該函數經常用於重定向用戶到登錄或錯誤頁面。既然重定向強制一個新頁請求,浏覽器就必須做兩次到 Web 服務器的往返,而且 Web 服務器必須處理額外的請求。IIS 5.0 引入一個新的函數,Server.Transfer,該函數執行傳送到相同服務器上的不同 ASP 頁。這樣避免了額外的、從浏覽器到 Web 服務器的往返,從而改善了整體系統性能,同時改善了對用戶的響應時間。請查看重定向中的新方向(英文),它討論了 Server.Transfer 和 Server.Execute。
也可以查看Leveraging ASP in IIS 5.0中有關 IIS 5.0 和 ASP 3.0 新功能的完全列表。(英文)
技巧 23:在目錄 URL 尾部加斜線
相關的技巧是,一定要定在指向目錄的 URL 尾部加斜線 (/)。如果省略了斜線,浏覽器將向服務器提出請求,僅通知它正尋找一個目錄。然後浏覽器發出第二個請求,在 URL 末尾添加斜線,然後服務器將那個目錄的默認文檔作為響應,或者如果沒有默認文檔並且目錄浏覽已被啟用,就以目錄列表作為響應。添加了斜線便省去了第一個沒用的往返。出於對用戶的友好,也許想要在顯示的名稱的末尾省略斜線。
例如,寫:
<a href="http://msdn.microsoft.com/workshop/" title="MSDN Web
Workshop">http://msdn.microsoft.com/workshop</a>
它還適用於指向在 Web 站點主頁的 URL:請使用下面的: <a href="http://msdn.microsoft.com/">,不要用 <a href="http://msdn.microsoft.com">.
技巧 24:避免使用服務器變量
訪問服務器變量將引起 Web 站點向服務器提出特殊的請求,然後收集所有的服務器變量,並不止是需要的那個。這好像從發霉的閣樓中的文件夾中檢索某條特殊的信息一樣。當想要某條信息時,在訪問該信息之前必須先上閣樓取得文件夾。這與請求服務器變量時,性能訪問出現第一次請求服務器變量所發生的一樣。後續的對其他服務器變量的訪問不會引起性能訪問。
從不訪問不合格的 Request 對象(例如,Request("Data"))。對於不在 Request.Cookies、Request.Form、Request.QueryString 或 Request.ClIEntCertificate 中的項,有對 Request.ServerVariables 的隱含調用。Request.ServerVariables 集合比其他集合慢很多。
技巧 25:升級為最新的和最好的版本
系統組件常常升級,建議升級為最新的和最好的版本。最好升級到 Windows 2000(還有,IIS 5.0、ADO 2.5、MSXML 2.5、Internet Explorer 5.0、VBScript 5.1 和 JScript 5.1)。IIS 5.0 和 ADO 2.5 在多處理器計算機上實現了非常好的性能。在 Windows 2000 下,ASP 能良好地擴展到四個處理器或者更多,但是在 IIS 4.0,ASP 不能擴展為超過兩個處理器。在應用程序中使用的腳本和 ADO 越多,升級到 Windows 2000 後獲得的性能提高就越大。
如果您還無法升級到 Windows 2000 ,可以升級為最新版本的 SQL Server、ADO、VBScript 和 JScript、MSXML、Internet Explorer 和 NT 4 Service Packs。它們都改進了性能並增強了可靠性。
技巧 26:調整 Web 服務器
有許多 IIS 調節參數可以改進站點性能。例如,使用 IIS 4.0,我們經常發現增加 ASP 的 ProcessorThreadMax 參數(請參閱 IIS 文檔)能獲得很大的好處,尤其是在經常等待後端資源,例如數據庫或其他中間層產品,例如 screen-scrapers,的站點上。在 IIS 5.0 中也許會發現,打開 ASP Thread Gating 比試圖為 ASPProcessorThreadMax 找一個最佳的設置更為有效。
下面的調整 IIS(英文),是一篇很好的資料。
最佳的配置取決於(在其他因素中)應用程序代碼、在其上運行的硬件以及客戶端的工作負荷。發現最佳設置的唯一方法是運行性能測試,它將我們帶入下一個技巧。
技巧 27:進行性能測試
如上所述,性能是一種指標。如果您正努力改進站點的性能,請先設置性能目標,然後提高性能直到達到目標為止。請不要將所有的性能測試放在項目的最後。往往到了項目的最後,再做非做不可的體系結構改動已為時太晚,並使客戶失望。性能測試是日常測試的一部分。性能測試可以針對獨立組件進行,例如 ASP 頁面或 COM 對象,也可以將站點作為一個整體進行。
許多人使用單一的浏覽器請求頁面來測試他們 Web 站點的性能。這將使您對站點的響應有很好的感覺,但對於站點在有負荷下的性能卻一無所知。
通常,要准確地測量性能,需要專用的測試環境。這個環境應該由那些,在處理器速度、處理器個數、內存、硬盤、網絡配置等方面,能模擬產品硬件的硬件組成。然後,需要定義客戶端的工作負荷:有多少並發用戶;他們提出請求的頻率;他們將訪問的頁面類型等等。如果您無法從站點獲得實際的使用數據,則需要估計它們。最後,需要一個能模擬預期客戶端工作負荷的工具。在這些工具的幫助下,可以開始回答一些問題,例如,如果我有 N 個並發用戶,需要多少台服務器?您還能找出瓶頸和優化的目標。
下面列出了一些好的 Web 強度測試工具。極力推薦“Microsoft Web 應用程序強度測試 (WAS)”工具包。WAS 允許記錄測試腳本,然後模擬成百或上千個訪問 Web 服務器的用戶。WAS 報告大量統計結果,包括每秒請求數、響應時間的分布和錯誤計數。WAS 具有增強客戶端和基於 Web 的接口;Web 接口允許進行遠程測試。