如何寫出優(yōu)秀的ASP應(yīng)用程序
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
怎樣創(chuàng)建魯棒性、正確性、可維護(hù)性和性能俱佳的asp應(yīng)用程序?要做什么?不做什么?本文以提綱的形式,給出了主要的check-points(檢查點(diǎn))。
active server page,簡稱asp,是: l連接網(wǎng)友界面(html)和商業(yè)邏輯(business logic); l提供一致的、容易使用的、有狀態(tài)保持的、基于web的客戶端; l為那些需要事務(wù)處理的web 應(yīng)用提供應(yīng)用程序環(huán)境。 asp不是: l 實(shí)現(xiàn)商業(yè)邏輯(business logic)的地方;商業(yè)邏輯應(yīng)該通過com+、mts或者數(shù)據(jù)庫來實(shí)現(xiàn)。 asp的使用者應(yīng)該有下面的教訓(xùn): l 開發(fā)應(yīng)用程序,而不是開發(fā)一個(gè)一個(gè)的孤立asp頁面; l 對輸入和輸出進(jìn)行緩存; l 在發(fā)布之前要測試; l 選擇性能較好的部件; l 減少數(shù)據(jù)庫的存?。壕彺孀儞Q后的結(jié)果; l 使用msmq來處理有時(shí)間延遲的工作; 站點(diǎn)設(shè)計(jì) u 信息架構(gòu):80/20準(zhǔn)則; u 站點(diǎn)導(dǎo)航; u 頁面布局; u 可用性; n 使用alt和title屬性; n 不使用圖片或者image map的導(dǎo)航; u 適合大多數(shù)低版本瀏覽器,考慮他們對activex、rds、xml、dhtml、java applet的支持狀況; u 屏幕分辨率和屏幕顏色數(shù) n 是否支持webtv、pda…? n 設(shè)置img的width和height屬性。 u 非瀏覽器的訪問,如自動(dòng)機(jī)器人(spider); u 使用幀(frame)? u 使用cookies的個(gè)性化; u 避免壞連接; u 使用meta標(biāo)簽; u 內(nèi)容審核; u 內(nèi)容檢索; u 結(jié)果反饋:用戶反饋和跟蹤; u 減少下載時(shí)間; 三層、四層應(yīng)用設(shè)計(jì)
u 在vbscript腳本中使用<%option explicit%>; u 使用字符串變量存儲sql字符串:便于調(diào)試; u 使用server.mappath和相對路徑; u 使用adodb.inc或者來引用常量,不要直接使用常量數(shù)值。 u 指定ado調(diào)用的缺省參數(shù),避免出錯(cuò); u 使用庫或者部件來封裝代碼。
u 使用server.urlencode u 錯(cuò)誤捕獲和處理 國際化: u 使用<%codepage%> u 使用session.codepage u 在iis5.0中,response.write支持utf8 其他: u 使用#include 重用代碼 u 使用分頁技術(shù) 站點(diǎn)安全: u 客戶身份驗(yàn)證 u 輸入驗(yàn)證 u #include 文件不要使用.inc后綴,使用.asp或者設(shè)置.inc的應(yīng)用程序映射 u 把mdb文件存放在非web路徑下; u 使用adsi做安全管理
u 使用起來很方便但是很有問題; u http是一個(gè)無狀態(tài)的協(xié)議; u 設(shè)計(jì)購物推車特別有用; u 不利于可伸縮性設(shè)計(jì)(scalability); u 在不需要session的頁面中使用<%enablesessionstate=false%> u 盡可能完全避免使用session; u 在多個(gè)web服務(wù)器情況下不適合; u 某些部件使session運(yùn)行在單一線程模式,減少了吞吐量; u 消耗內(nèi)存; u session有超時(shí)的問題 u 需要客戶端的瀏覽器打開cookie設(shè)置; u 不要在session中保存recordset,或者緩存connection對象; u 在global.asa不要使用空的session_onend; u 可選方案: n cookies u 直接狀態(tài)編碼:簡單、容易、不安全 u 后端數(shù)據(jù)庫的id作為狀態(tài)值 n querystring 參數(shù) n 如amazon的url方式 n 隱藏的表單 application變量: u 共享變量 u 不能持久保存 u 多個(gè)web服務(wù)器時(shí)不行,除非只是只讀變量。 緩存 u 不要使用response.expires=0,使用負(fù)數(shù): n response.expires=-10000; n response.addheader “pragma”,”no-cache” uresponse.addheader “cache-control”,”no-store” u 服務(wù)器緩存 u proxy緩存 u 客戶端緩存 部件 u 伸縮性 u 分離商務(wù)邏輯和頁面表現(xiàn) u 被asp或其他環(huán)境重用 u 事務(wù)處理 u 類型安全 u 存取操作系統(tǒng)特性 u 保護(hù)知識產(chǎn)權(quán) u 在下列情況下使用server.createobject: n mts事務(wù)處理 n 上下文安全性 n asp內(nèi)部部件 n onstartpage、onendpage u 使用 u 是否保存到session或者application變量中 u
n 關(guān)閉connection并:set connection=nothing n 使用局部變量 n 用 n 不要使用session和application變量 n 不要將com對象存儲在session或者application變量中 n 關(guān)閉腳本調(diào)試 n 避免重復(fù)的字符串相加 n 在費(fèi)時(shí)的頁面頂端使用response.isclientconnected n 使用msmq n 不要在session或者application中存儲大數(shù)組 n 不要redim 數(shù)組 n 將集合類型的對象賦給臨時(shí)變量 n 減小微處理器的最大線程數(shù)(運(yùn)行regedt32,在hkey_local_machinesystem currentcontrolsetservicesw3svcaspparameters,增加processorthreadmax,減小這個(gè)值,看看性能的變化;或者增大這個(gè)值。) n 設(shè)置aspscriptenginecachemax,使它等于processorthreadmax*cpu個(gè)數(shù)。缺省的是30;(在系統(tǒng)路徑下:system32inetsrv/adminisamples下,鍵入adsutil.vbs,設(shè)置/w3svc/aspscriptenginecachemax); n 減少session.timeout; n 在mmc中,設(shè)置asp應(yīng)用程序緩沖為有效。
n css、dhtml n xml n rds n remote scripting n xmlhttp n 客戶端驗(yàn)證 n 減小文件大小 n 盡可能避免https和ssl n 使用response.end測試性能 n 數(shù)據(jù)庫 n 緩存變換后的結(jié)果; n 使用odbc連接池和oledb資源池; n 使用系統(tǒng)dsn或者非dsn,不要使用dsn或者文件dsn; n 使ado運(yùn)行在雙線程模式(both-threaded):makefre.bat; n 使用ado的field對象; n getstring或者getrows比較快; n rds和xml把負(fù)載嫁到客戶端; n 不要使用select *,把字段寫出來; n 盡量使用sql server 7,不要使用access; n 使用sql server的特性:存儲過程、job、join、sort、group n 使用sql analysis,優(yōu)化sql的性能 n 使用索引 n 本地使用name-pipes,遠(yuǎn)程使用sockets n 準(zhǔn)確地指定command type iis 5的新特性 n asp性能提高 n server.transfer比server.redirect更好 n server.execute n server.getlasterror 該文章在 2010/7/4 23:55:08 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |