嚴格控制Session可以將不需要Session的內容(比如幫助畫面,訪問者區域,等等)移動到關閉Session的獨立ASP應用程序中。在基礎頁面上,可以給ASP一個指示,讓它不需要使用Session。將下面的代碼直接加入到ASP頁面的頭部:
<%@EnableSessionState=False%>
在Web服務器上緩存經常使用的數據典型的情況是:ASP頁面從後台存儲中取回數據,然後以超文本標記語言(HTML)的形式形成結果。不管數據庫的速度如何,從內存中取回數據要比從後台存儲設備中快得多。從本地硬盤讀取數據通常也非常快。所以,提高性能可以通過緩存服務器上的數據來實現,無論是將數據緩存在內存中,或者本地硬盤中。
緩存是經典的“空間換時間”的折中方式。如果緩存得恰當,就可以看到顯著的性能提升。為了讓緩存有效,必須保證緩存數據是經常要重用的,而且也是計算起來繁瑣的。裝滿陳舊數據的緩存是對內存的浪費。
不經常改變的數據是緩存的較好對象,因為不需要隨時考慮這些數據更新後的同步操作。組合框、參考表格、DHTML代碼、擴展標記語言串、菜單以及站點配置變量(包括數據源名字,Internet協議地址IP以及Web路徑)都是很好的緩存對象。注意:要緩存數據表達式而不是數據本身。如果一個ASP頁面經常變化並且很費力去緩存(比如整個產品目錄),就要考慮預產生HTML,而不是每次發生請求時再描述它。
在Application或Session對象中緩存經常使用的數據ASP中的Application和Session對象是在內存中緩存數據的便利容器。你可以將數據賦值給Application和Session對象,這些數據在HTTP調用期間將一直保持在內存中。Session中的數據是為每一個用戶服務的,Application中的數據是所有用戶共享的。
何時需要在Application和Session中裝入數據?通常,當應用程序啟動或者會話開始時,數據就被裝入了。為了在這時裝入數據,在Application OnStart()或者Session OnStart()中分別添加適當的代碼。這些函數位於文件Global.asa中,如果原來不存在,就添加上。也可以在數據首次需要的時候調入,在ASP頁面中添加代碼,檢查數據是否存在,如果沒有發現,就調入它。這裡有一個例子,它代表了被稱為“lazy evalution”的經典性能處理技術:直到需要,再去計算。
拷貝經常使用的數據到腳本變量中在ASP中存取COM對象時,應該拷貝經常使用的對象數據到腳本變量中,這樣就減少了對COM對象的方法調用。這些調用要比存取腳本變量相對來說費時費力。當存取Collection和Dictionary對象時,使用這項技巧也減少了昂貴的查找操作。
通常,如果要不止一次地存取對象數據,就應將數據放入腳本變量中,對象數據主要也就是Request變量(表單和查詢字符串變量)。比如,站點要傳遞一個叫做UserID的查詢字符串變量,假設它將在一個特殊頁面被引用12次,那麼不需要調用Request("UserID")12次,只要在ASP頁面的頭部分配給UserID一個變量,然後在頁面中使用它,這樣做就節省了11次COM方法的調用。
在任何可能時使用Server.Transfer,而不要用Response.RedirectResponse.Redirect告訴浏覽器請求另一個不同的頁面,這常常用於引導用戶到登錄頁面或者出錯處理頁面。由於重定向強迫了一個新頁面請求,結果是浏覽器必須要與Web服務器循環2次,並且Web服務器必須處理一個額外的請求。Server.Transfer執行在同一服務器上的頁面傳輸,這將避免額外的浏覽器-Web服務器的數據循環,形成良好的系統性能,對於用戶也有較好的響應時間。當然Server.Transfer只支持相對路徑(即站內使用)。