如何寫出優秀的ASP應用 (1)
來源:互聯網
上載者:User
怎樣建立魯棒性、正確性、可維護性和效能俱佳的ASP應用程式?要做什嗎?不做什嗎?本文以提綱的形式,給出了主要的Check-Points(檢查點)。
什麼是ASP
Active Server Page,簡稱ASP,是:
. 串連網友介面(HTML)和商業邏輯(Business Logic);
. 提供一致的、容易使用的、有狀態保持的、基於Web的用戶端;
. 為那些需要交易處理的WEB 應用提供應用程式環境。
ASP不是:
. 實現商業邏輯(Business Logic)的地方;商業邏輯應該通過COM+、MTS或者資料庫來實現。
ASP的使用者應該有下面的教訓:
. 開發應用程式,而不是開發一個一個的孤立ASP頁面;
. 對輸入和輸出進行緩衝;
. 在發布之前要測試;
. 選擇效能較好的組件;
. 減少資料庫的存取:緩衝變換後的結果;
. 使用MSMQ來處理有時間延遲的工作;
網站設計
. 你的網站想提供什嗎?
. 資訊架構:80/20準則;
. 網站導覽;
. 頁面配置;
. 可用性;
. 使用ALT和Title屬性;
. 不使用圖片或者Image Map的導航;
. 適合大多數低版本瀏覽器,考慮他們對ActiveX、RDS、XML、DHTML、Java Applet的支援狀況;
. 螢幕解析度和螢幕顏色數
. 是否支援WebTV、PDA…?
. 設定IMG的width和height屬性。
. 非瀏覽器的訪問,如自動機器人(Spider);
. 使用幀(Frame)?
. 使用Cookies的個人化;
. 避免壞串連;
. 使用meta標籤;
. 內容審核;
. 內容檢索;
. 結果反饋:使用者反饋和跟蹤;
. 減少下載時間;
三層、四層應用設計
可讀性、可維護性
. 使用注釋;
. 在VBScript指令碼中使用<%Optio. Explicit%>;
. 使用字串變數儲存SQL字串:便於調試;
. 使用Server.MapPath和相對路徑;
. 使用ADODB.INC或者<!—metadata typelib=somelib file=somedll-->來引用常量,不要直接使用常量數值。
. 指定ADO調用的預設參數,避免出錯;
. 使用庫或者組件來封裝代碼。
正確的方法:
. 使用Server.URLEncode
. 錯誤捕獲和處理
國際化:
. 使用<%CodePage%>
. 使用Session.CodePage
. 在IIS5.0中,Response.write支援UTF8
其他:
. 使用#include 重用代碼
. 使用分頁技術
網站安全:
. 客戶身分識別驗證
. 輸入驗證
. #include 檔案不要使用.INC尾碼,使用.ASP或者設定.INC的應用程式對應
. 把MDB檔案存放在非WEB路徑下;
. 使用ADSI做安全管理
Session和Application狀態
Session的使用:
. 使用起來很方便但是很有問題;
. HTTP是一個無狀態的協議;
. 設計購物推車特別有用;
. 不利於延展性設計(Scalability);
. 在不需要Session的頁面中使用<%EnableSessionState=false%>
. 儘可能完全避免使用Session;
. 在多個web伺服器情況下不適合;
. 某些組件使Session運行在單一線程模式,減少了輸送量;
. 消耗記憶體;
. Session有逾時的問題
. 需要用戶端的瀏覽器開啟cookie設定;
. 不要在session中儲存recordset,或者緩衝connection對象;
. 在global.asa不要使用空的Session_OnEnd;
. 可選方案:
. cookies
. 直接狀態編碼:簡單、容易、不安全
. 後端資料庫的ID作為狀態值
. querystring 參數
. 如amazon的url方式
. 隱藏的表單
Application變數:
. 共用變數
. 不能持久儲存
. 多個web伺服器時不行,除非只是唯讀變數。
緩衝
. 對靜態內容非常理想
. 不要使用Response.Expires=0,使用負數:
. Response.Expires=-10000;
. Response.AddHeader “Pragma”,”no-cache”
. Response.AddHeader “cache-control”,”no-store”
. 伺服器緩衝
. proxy緩衝
. 用戶端緩衝