如何寫出優秀的ASP應用程式

來源:互聯網
上載者:User
程式


怎樣建立魯棒性、正確性、可維護性和效能俱佳的ASP應用程式?要做什嗎?不做什嗎?本文以提綱的形式,給出了主要的Check-Points(檢查點)。

什麼是ASP

Active Server Page,簡稱ASP,是:

l串連網友介面(HTML)和商業邏輯(Business Logic);

l提供一致的、容易使用的、有狀態保持的、基於WEB的用戶端;

l為那些需要交易處理的WEB 應用提供應用程式環境。

ASP不是:

l 實現商業邏輯(Business Logic)的地方;商業邏輯應該通過COM+、MTS或者資料庫來實現。

ASP的使用者應該有下面的教訓:

l 開發應用程式,而不是開發一個一個的孤立ASP頁面;

l 對輸入和輸出進行緩衝;

l 在發布之前要測試;

l 選擇效能較好的組件;

l 減少資料庫的存取:緩衝變換後的結果;

l 使用MSMQ來處理有時間延遲的工作;

網站設計
u 你的網站想提供什嗎?

u 資訊架構:80/20準則;

u 網站導覽;

u 頁面配置;

u 可用性;

n 使用ALT和Title屬性;

n 不使用圖片或者Image Map的導航;

u 適合大多數低版本瀏覽器,考慮他們對ActiveX、RDS、XML、DHTML、Java Applet的支援狀況;

u 螢幕解析度和螢幕顏色數

n 是否支援WebTV、PDA…?

n 設定IMG的width和height屬性。

u 非瀏覽器的訪問,如自動機器人(Spider);

u 使用幀(Frame)?

u 使用Cookies的個人化;

u 避免壞串連;

u 使用meta標籤;

u 內容審核;

u 內容檢索;

u 結果反饋:使用者反饋和跟蹤;

u 減少下載時間;

三層、四層應用設計

可讀性、可維護性
u 使用注釋;

u 在VBScript指令碼中使用<%Option Explicit%>;

u 使用字串變數儲存SQL字串:便於調試;

u 使用Server.MapPath和相對路徑;

u 使用ADODB.INC或者<!—metadata typelib=somelib file=somedll-->來引用常量,不要直接使用常量數值。

u 指定ADO調用的預設參數,避免出錯;

u 使用庫或者組件來封裝代碼。

正確的方法:

u 使用Server.URLEncode

u 錯誤捕獲和處理

國際化:

u 使用<%CodePage%>

u 使用Session.CodePage

u 在IIS5.0中,Response.write支援UTF8

其他:

u 使用#include 重用代碼

u 使用分頁技術

網站安全:

u 客戶身分識別驗證

u 輸入驗證

u #include 檔案不要使用.INC尾碼,使用.ASP或者設定.INC的應用程式對應

u 把MDB檔案存放在非WEB路徑下;

u 使用ADSI做安全管理

Session和Application狀態
Session的使用:

u 使用起來很方便但是很有問題;

u HTTP是一個無狀態的協議;

u 設計購物推車特別有用;

u 不利於延展性設計(Scalability);

u 在不需要Session的頁面中使用<%EnableSessionState=false%>

u 儘可能完全避免使用Session;

u 在多個web伺服器情況下不適合;

u 某些組件使Session運行在單一線程模式,減少了輸送量;

u 消耗記憶體;

u Session有逾時的問題

u 需要用戶端的瀏覽器開啟cookie設定;

u 不要在session中儲存recordset,或者緩衝connection對象;

u 在global.asa不要使用空的Session_OnEnd;

u 可選方案:

n cookies

u 直接狀態編碼:簡單、容易、不安全

u 後端資料庫的ID作為狀態值

n querystring 參數

n 如amazon的url方式

n 隱藏的表單

Application變數:

u 共用變數

u 不能持久儲存

u 多個web伺服器時不行,除非只是唯讀變數。

緩衝
u 對靜態內容非常理想

u 不要使用Response.Expires=0,使用負數:

n Response.Expires=-10000;

n Response.AddHeader “Pragma”,”no-cache”

uResponse.AddHeader “cache-control”,”no-store”

u 伺服器緩衝

u proxy緩衝

u 用戶端緩衝

組件
u 效能

u 伸縮性

u 分離商務邏輯和頁面表現

u 被ASP或其他環境重用

u 交易處理

u 型別安全

u 存取作業系統特性

u 保護智慧財產權

u 在下列情況下使用Server.CreateObject:

n MTS交易處理

n 上下文安全性

n ASP內部組件

n OnStartPage、OnEndPage

u 使用<Object RunAt=server>延遲物件初始化

u 是否儲存到Session或者Application變數中

u

效能
n Response緩衝:Response.Buffer=True

n 關閉Connection並:set Connection=Nothing

n 使用局部變數

n 用<Object >代替Server.CreateObject

n 不要使用Session和Application變數

n 不要將COMObject Storage Service在Session或者Application變數中

n 關閉指令碼調試

n 避免重複的字串相加

n 在費時的頁面頂端使用Response.IsClientConnected

n 使用MSMQ

n 不要在Session或者Application中儲存大數組

n 不要ReDim 數組

n 將集合類型的對象賦給臨時變數

n 減小微處理器的最大線程數(運行regedt32,在HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\w3SVC\ASP\Parameters,增加ProcessorThreadMax,減小這個值,看看效能的變化;或者增大這個值。)

n 設定AspScriptEngineCacheMax,使它等於ProcessorThreadMax*CPU個數。預設的是30;(在系統路徑下:\system32\inetsrv/adminisamples下,鍵入adsutil.vbs,設定/w3svc/AspScriptEngineCacheMax);

n 減少Session.Timeout;

n 在MMC中,設定ASP應用程式緩衝為有效。

把某些工作交給用戶端:

n CSS、DHTML

n XML

n RDS

n Remote Scripting

n Xmlhttp

n 用戶端驗證

n 減小檔案大小

n 儘可能避免https和SSL

n 使用Response.End測試效能

n

資料庫
n 減少資料庫存取訪問;

n 緩衝變換後的結果;

n 使用ODBC串連池和OLEDB資源集區;

n 使用系統DSN或者非DSN,不要使用DSN或者檔案DSN;

n 使ADO運行在雙線程模式(Both-threaded):makefre.bat;

n 使用ADO的Field對象;

n GetString或者GetRows比較快;

n RDS和XML把負載嫁到用戶端;

n 不要使用Select *,把欄位寫出來;

n 盡量使用SQL Server 7,不要使用Access;

n 使用SQL Server的特性:預存程序、Job、Join、sort、group

n 使用SQL Analysis,最佳化SQL的效能

n 使用索引

n 本地使用Name-pipes,遠程使用Sockets

n 準確地指定Command Type

IIS 5的新特性
n 可靠的重新啟動

n ASP效能提高

n Server.Transfer比Server.Redirect更好

n Server.Execute

n Server.GetLastError




相關文章

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