直播中
什么是ASP
Active Server Page,簡(jiǎn)稱(chēng)ASP,是:
l連接網(wǎng)友界面(HTML)和商業(yè)邏輯(Business Logic);
l提供一致的、容易使用的、有狀態(tài)保持的、基于WEB的客戶(hù)端;
l為那些需要事務(wù)處理的WEB 應(yīng)用提供應(yīng)用程序環(huán)境。
ASP不是:
l 實(shí)現(xiàn)商業(yè)邏輯(Business Logic)的地方;商業(yè)邏輯應(yīng)該通過(guò)COM+、MTS或者數(shù)據(jù)庫(kù)來(lái)實(shí)現(xiàn)。
ASP的使用者應(yīng)該有下面的教訓(xùn):
l 開(kāi)發(fā)應(yīng)用程序,而不是開(kāi)發(fā)一個(gè)一個(gè)的孤立ASP頁(yè)面;
l 對(duì)輸入和輸出進(jìn)行緩存;
l 在發(fā)布之前要測(cè)試;
l 選擇性能較好的部件;
l 減少數(shù)據(jù)庫(kù)的存取:緩存變換后的結(jié)果;
l 使用MSMQ來(lái)處理有時(shí)間延遲的工作;
站點(diǎn)設(shè)計(jì)
u 你的站點(diǎn)想提供什么?
u 信息架構(gòu):80/20準(zhǔn)則;
u 站點(diǎn)導(dǎo)航;
u 頁(yè)面布局;
u 可用性;
n 使用ALT和Title屬性;
n 不使用圖片或者Image Map的導(dǎo)航;
u 適合大多數(shù)低版本瀏覽器,考慮他們對(duì)ActiveX、RDS、XML、DHTML、Java Applet的支持狀況;
u 屏幕分辨率和屏幕顏色數(shù)
n 是否支持WebTV、PDA…?
n 設(shè)置IMG的width和height屬性。
u 非瀏覽器的訪問(wèn),如自動(dòng)機(jī)器人(Spider);
u 使用幀(Frame)?
u 使用Cookies的個(gè)性化;
u 避免壞連接;
u 使用meta標(biāo)簽;
u 內(nèi)容審核;
u 內(nèi)容檢索;
u 結(jié)果反饋:用戶(hù)反饋和跟蹤;
u 減少下載時(shí)間;
三層、四層應(yīng)用設(shè)計(jì)
可讀性、可維護(hù)性
u 使用注釋?zhuān)?/P>
u 在VBScript腳本中使用<%Option Explicit%>;
u 使用字符串變量存儲(chǔ)SQL字符串:便于調(diào)試;
u 使用Server.MapPath和相對(duì)路徑;
u 使用ADODB.INC或者<!—metadata typelib=somelib file=somedll-->來(lái)引用常量,不要直接使用常量數(shù)值。
u 指定ADO調(diào)用的缺省參數(shù),避免出錯(cuò);
u 使用庫(kù)或者部件來(lái)封裝代碼。
正確的方法:
u 使用Server.URLEncode
u 錯(cuò)誤捕獲和處理
國(guó)際化:
u 使用<%CodePage%>
u 使用Session.CodePage
u 在IIS5.0中,Response.write支持UTF8
其他:
u 使用#include 重用代碼
u 使用分頁(yè)技術(shù)
站點(diǎn)安全:
u 客戶(hù)身份驗(yàn)證
u 輸入驗(yàn)證
u #include 文件不要使用.INC后綴,使用.ASP或者設(shè)置.INC的應(yīng)用程序映射
u 把MDB文件存放在非WEB路徑下;
u 使用ADSI做安全管理
Session和Application狀態(tài)
Session的使用:
u 使用起來(lái)很方便但是很有問(wèn)題;
u HTTP是一個(gè)無(wú)狀態(tài)的協(xié)議;
u 設(shè)計(jì)購(gòu)物推車(chē)特別有用;
u 不利于可伸縮性設(shè)計(jì)(Scalability);
u 在不需要Session的頁(yè)面中使用<%EnableSessionState=false%>
u 盡可能完全避免使用Session;
u 在多個(gè)web服務(wù)器情況下不適合;
u 某些部件使Session運(yùn)行在單一線程模式,減少了吞吐量;
u 消耗內(nèi)存;
u Session有超時(shí)的問(wèn)題
u 需要客戶(hù)端的瀏覽器打開(kāi)cookie設(shè)置;
u 不要在session中保存recordset,或者緩存connection對(duì)象;
u 在global.asa不要使用空的Session_OnEnd;
u 可選方案:
n cookies
u 直接狀態(tài)編碼:簡(jiǎn)單、容易、不安全
u 后端數(shù)據(jù)庫(kù)的ID作為狀態(tài)值
n querystring 參數(shù)
n 如amazon的url方式
n 隱藏的表單
Application變量:
u 共享變量
u 不能持久保存
u 多個(gè)web服務(wù)器時(shí)不行,除非只是只讀變量。
緩存
u 對(duì)靜態(tài)內(nèi)容非常理想
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 客戶(hù)端緩存
部件
u 性能
u 伸縮性
u 分離商務(wù)邏輯和頁(yè)面表現(xiàn)
u 被ASP或其他環(huán)境重用
u 事務(wù)處理
u 類(lèi)型安全
u 存取操作系統(tǒng)特性
u 保護(hù)知識(shí)產(chǎn)權(quán)
u 在下列情況下使用Server.CreateObject:
n MTS事務(wù)處理
n 上下文安全性
n ASP內(nèi)部部件
n OnStartPage、OnEndPage
u 使用<Object RunAt=server>延遲對(duì)象初始化
u 是否保存到Session或者Application變量中
u
性能
n Response緩沖:Response.Buffer=True
n 關(guān)閉Connection并:set Connection=Nothing
n 使用局部變量
n 用<Object >代替Server.CreateObject
n 不要使用Session和Application變量
n 不要將COM對(duì)象存儲(chǔ)在Session或者Application變量中
n 關(guān)閉腳本調(diào)試
n 避免重復(fù)的字符串相加
n 在費(fèi)時(shí)的頁(yè)面頂端使用Response.IsClientConnected
n 使用MSMQ
n 不要在Session或者Application中存儲(chǔ)大數(shù)組
n 不要ReDim 數(shù)組
n 將集合類(lèi)型的對(duì)象賦給臨時(shí)變量
n 減小微處理器的最大線程數(shù)(運(yùn)行regedt32,在HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\w3SVC\ASP\Parameters,增加ProcessorThreadMax,減小這個(gè)值,看看性能的變化;或者增大這個(gè)值。)
n 設(shè)置AspScriptEngineCacheMax,使它等于ProcessorThreadMax*CPU個(gè)數(shù)。缺省的是30;(在系統(tǒng)路徑下:\system32\inetsrv/adminisamples下,鍵入adsutil.vbs,設(shè)置/w3svc/AspScriptEngineCacheMax);
n 減少Session.Timeout;
n 在MMC中,設(shè)置ASP應(yīng)用程序緩沖為有效。
把某些工作交給客戶(hù)端:
n CSS、DHTML
n XML
n RDS
n Remote Scripting
n Xmlhttp
n 客戶(hù)端驗(yàn)證
n 減小文件大小
n 盡可能避免https和SSL
n 使用Response.End測(cè)試性能
n
數(shù)據(jù)庫(kù)
n 減少數(shù)據(jù)庫(kù)存取訪問(wèn);
n 緩存變換后的結(jié)果;
n 使用ODBC連接池和OLEDB資源池;
n 使用系統(tǒng)DSN或者非DSN,不要使用DSN或者文件DSN;
n 使ADO運(yùn)行在雙線程模式(Both-threaded):makefre.bat;
n 使用ADO的Field對(duì)象;
n GetString或者GetRows比較快;
n RDS和XML把負(fù)載嫁到客戶(hù)端;
n 不要使用Select *,把字段寫(xiě)出來(lái);
n 盡量使用SQL Server 7,不要使用Access;
n 使用SQL Server的特性:存儲(chǔ)過(guò)程、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 可靠的重新啟動(dòng)
n ASP性能提高
n Server.Transfer比Server.Redirect更好
n Server.Execute
n Server.GetLastError