明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

如何寫出優(yōu)秀的ASP應(yīng)用

[摘要]怎樣創(chuàng)建魯棒性、正確性、可維護(hù)性和性能俱佳的ASP應(yīng)用程序?要做什么?不做什么?本文以提綱的形式,給出了主要的Check-Points(檢查點(diǎn))。什么是ASPActive Server Page,簡稱ASP,是:. 連接網(wǎng)友界面(HTML)和商業(yè)邏輯(Business Logic);. 提供一致的...

怎樣創(chuàng)建魯棒性、正確性、可維護(hù)性和性能俱佳的ASP應(yīng)用程序?要做什么?不做什么?本文以提綱的形式,給出了主要的Check-Points(檢查點(diǎn))。

什么是ASP

Active Server Page,簡稱ASP,是:

. 連接網(wǎng)友界面(HTML)和商業(yè)邏輯(Business Logic);
. 提供一致的、容易使用的、有狀態(tài)保持的、基于WEB的客戶端;
. 為那些需要事務(wù)處理的WEB 應(yīng)用提供應(yīng)用程序環(huán)境。

ASP不是

. 實(shí)現(xiàn)商業(yè)邏輯(Business Logic)的地方;商業(yè)邏輯應(yīng)該通過COM+、MTS或者數(shù)據(jù)庫來實(shí)現(xiàn)。

ASP的使用者應(yīng)該有下面的教訓(xùn)

. 開發(fā)應(yīng)用程序,而不是開發(fā)一個(gè)一個(gè)的孤立ASP頁面;
. 對(duì)輸入和輸出進(jìn)行緩存;
. 在發(fā)布之前要測(cè)試;
. 選擇性能較好的部件;
. 減少數(shù)據(jù)庫的存。壕彺孀儞Q后的結(jié)果;
. 使用MSMQ來處理有時(shí)間延遲的工作;

站點(diǎn)設(shè)計(jì)

. 你的站點(diǎn)想提供什么?
. 信息架構(gòu):80/20準(zhǔn)則;
. 站點(diǎn)導(dǎo)航;
. 頁面布局;
. 可用性;
. 使用ALT和Title屬性;
. 不使用圖片或者Image Map的導(dǎo)航;
. 適合大多數(shù)低版本瀏覽器,考慮他們對(duì)ActiveX、RDS、XML、DHTML、Java Applet的支持狀況;
. 屏幕分辨率和屏幕顏色數(shù)
. 是否支持WebTV、PDA…?
. 設(shè)置IMG的width和height屬性。
. 非瀏覽器的訪問,如自動(dòng)機(jī)器人(Spider);
. 使用幀(Frame)?
. 使用Cookies的個(gè)性化;
. 避免壞連接;
. 使用meta標(biāo)簽;
. 內(nèi)容審核;
. 內(nèi)容檢索;
. 結(jié)果反饋:用戶反饋和跟蹤;
. 減少下載時(shí)間;

三層、四層應(yīng)用設(shè)計(jì)

可讀性、可維護(hù)性

. 使用注釋;
. 在VBScript腳本中使用<%Optio. Explicit%>;
. 使用字符串變量存儲(chǔ)SQL字符串:便于調(diào)試;
. 使用Server.MapPath和相對(duì)路徑;
. 使用ADODB.INC或者<!—metadata typelib=somelib file=somedll-->來引用常量,不要直接使用常量數(shù)值。
. 指定ADO調(diào)用的缺省參數(shù),避免出錯(cuò);
. 使用庫或者部件來封裝代碼。

正確的方法

. 使用Server.URLEncode
. 錯(cuò)誤捕獲和處理

國際化

. 使用<%CodePage%>
. 使用Session.CodePage
. 在IIS5.0中,Response.write支持UTF8

其他

. 使用#include 重用代碼
. 使用分頁技術(shù)

站點(diǎn)安全

. 客戶身份驗(yàn)證
. 輸入驗(yàn)證
. #include 文件不要使用.INC后綴,使用.ASP或者設(shè)置.INC的應(yīng)用程序映射
. 把MDB文件存放在非WEB路徑下;
. 使用ADSI做安全管理

Session和Application狀態(tài)

Session的使用

. 使用起來很方便但是很有問題;
. HTTP是一個(gè)無狀態(tài)的協(xié)議;
. 設(shè)計(jì)購物推車特別有用;
. 不利于可伸縮性設(shè)計(jì)(Scalability);
. 在不需要Session的頁面中使用<%EnableSessionState=false%>
. 盡可能完全避免使用Session;
. 在多個(gè)web服務(wù)器情況下不適合;
. 某些部件使Session運(yùn)行在單一線程模式,減少了吞吐量;
. 消耗內(nèi)存;
. Session有超時(shí)的問題
. 需要客戶端的瀏覽器打開cookie設(shè)置;
. 不要在session中保存recordset,或者緩存connection對(duì)象;
. 在global.asa不要使用空的Session_OnEnd;
. 可選方案:
. cookies
. 直接狀態(tài)編碼:簡單、容易、不安全
. 后端數(shù)據(jù)庫的ID作為狀態(tài)值
. querystring 參數(shù)
. 如amazon的url方式
. 隱藏的表單

Application變量

. 共享變量
. 不能持久保存
. 多個(gè)web服務(wù)器時(shí)不行,除非只是只讀變量。

緩存

. 對(duì)靜態(tài)內(nèi)容非常理想
. 不要使用Response.Expires=0,使用負(fù)數(shù):
. Response.Expires=-10000;
. Response.AddHeader “Pragma”,”no-cache”
. Response.AddHeader “cache-control”,”no-store”
. 服務(wù)器緩存
. proxy緩存
. 客戶端緩存

部件

. 性能
. 伸縮性
. 分離商務(wù)邏輯和頁面表現(xiàn)
. 被ASP或其他環(huán)境重用
. 事務(wù)處理
. 類型安全
. 存取操作系統(tǒng)特性
. 保護(hù)知識(shí)產(chǎn)權(quán)
. 在下列情況下使用Server.CreateObject:
. MTS事務(wù)處理
. 上下文安全性
. ASP內(nèi)部部件
. OnStartPage、OnEndPage
. 使用<Object RunAt=server>延遲對(duì)象初始化
. 是否保存到Session或者Application變量中

性能

. Response緩沖:Response.Buffer=True
. 關(guān)閉Connection并:set Connection=Nothing
. 使用局部變量
. 用<Object >代替Server.CreateObject
. 不要使用Session和Application變量
. 不要將COM對(duì)象存儲(chǔ)在Session或者Application變量中
. 關(guān)閉腳本調(diào)試
. 避免重復(fù)的字符串相加
. 在費(fèi)時(shí)的頁面頂端使用Response.IsClientConnected
. 使用MSMQ
. 不要在Session或者Application中存儲(chǔ)大數(shù)組
. 不要ReDim 數(shù)組
. 將集合類型的對(duì)象賦給臨時(shí)變量
. 減小微處理器的最大線程數(shù)(運(yùn)行regedt32,在HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\w3SVC\ASP\Parameters,增加ProcessorThreadMax,減小這個(gè)值,看看性能的變化;或者增大這個(gè)值。)
. 設(shè)置AspScriptEngineCacheMax,使它等于ProcessorThreadMax*CPU個(gè)數(shù)。缺省的是30;(在系統(tǒng)路徑下:\system32\inetsrv/adminisamples下,鍵入adsutil.vbs,設(shè)置/w3svc/AspScriptEngineCacheMax);
. 減少Session.Timeout;
. 在MMC中,設(shè)置ASP應(yīng)用程序緩沖為有效。

把某些工作交給客戶端

. CSS、DHTML
. XML
. RDS
. Remote Scripting
. Xmlhttp
. 客戶端驗(yàn)證
. 減小文件大小
. 盡可能避免https和SSL
. 使用Response.End測(cè)試性能

數(shù)據(jù)庫

. 減少數(shù)據(jù)庫存取訪問;
. 緩存變換后的結(jié)果;
. 使用ODBC連接池和OLEDB資源池;
. 使用系統(tǒng)DSN或者非DSN,不要使用DSN或者文件DSN;
. 使ADO運(yùn)行在雙線程模式(Both-threaded):makefre.bat;
. 使用ADO的Field對(duì)象;
. GetString或者GetRows比較快;
. RDS和XML把負(fù)載嫁到客戶端;
. 不要使用Select *,把字段寫出來;
. 盡量使用SQ. Server 7,不要使用Access;
. 使用SQ. Server的特性:存儲(chǔ)過程、Job、Join、sort、group
. 使用SQ. Analysis,優(yōu)化SQL的性能
. 使用索引
. 本地使用Name-pipes,遠(yuǎn)程使用Sockets
. 準(zhǔn)確地指定Command Type

IIS 5的新特性

. 可靠的重新啟動(dòng)
. ASP性能提高
. Server.Transfer比Server.Redirect更好
. Server.Execute
. Server.GetLastError