優(yōu)化Web數(shù)據(jù)庫(kù)頁(yè)面
發(fā)布時(shí)間:2008-10-19 閱讀數(shù): 次 來源:網(wǎng)樂原科技
隨著互聯(lián)網(wǎng)的發(fā)展,Web數(shù)據(jù)庫(kù)的應(yīng)用越來越多,用戶對(duì)訪問Web數(shù)據(jù)庫(kù)頁(yè)面的速度也要求越來越高。訪問Web頁(yè)面的速度的快慢取決于網(wǎng)絡(luò)的速度、Web頁(yè)面所在服務(wù)器的性能以及Web頁(yè)面本身的設(shè)計(jì)等多方面原因。本文介紹一種根據(jù)筆者多年開發(fā)經(jīng)驗(yàn)總結(jié)的優(yōu)化Web數(shù)據(jù)庫(kù)頁(yè)面的方法。
解決原理
用戶訪問靜態(tài)Web頁(yè)面時(shí),Web服務(wù)器只需簡(jiǎn)單地將該頁(yè)面?zhèn)骰亟o用戶瀏覽器,由瀏覽器解釋執(zhí)行;而用戶訪問“動(dòng)態(tài)”Web頁(yè)面時(shí)(含服務(wù)器端執(zhí)行程序),Web服務(wù)器需要先解釋執(zhí)行該頁(yè)面,將嵌入在頁(yè)面中的服務(wù)器端執(zhí)行代碼在服務(wù)器端執(zhí)行完畢,并將執(zhí)行結(jié)果形成一個(gè)“靜態(tài)”的Web頁(yè)面?zhèn)骰亟o用戶瀏覽器,再由瀏覽器解釋執(zhí)行。
在Web數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)中,當(dāng)用戶訪問Web數(shù)據(jù)庫(kù)頁(yè)面時(shí),Web服務(wù)器需要先與數(shù)據(jù)庫(kù)服務(wù)器交換信息,從數(shù)據(jù)庫(kù)中動(dòng)態(tài)地讀取數(shù)據(jù)并形成一個(gè)“靜態(tài)”的Web頁(yè)面?zhèn)骰赜脩魹g覽器端,再由瀏覽器解釋執(zhí)行。
基于Web頁(yè)面的上述執(zhí)行過程,如果把“從數(shù)據(jù)庫(kù)中動(dòng)態(tài)讀取數(shù)據(jù)”只執(zhí)行一次并形成一個(gè)“靜態(tài)”的HTML代碼段,在需要從數(shù)據(jù)庫(kù)中動(dòng)態(tài)讀取數(shù)據(jù)的頁(yè)面中插入該段代碼,就能減少訪問數(shù)據(jù)庫(kù)的開銷,從而提高訪問該頁(yè)面的速度,其原理類似于程序的一次編譯、多次執(zhí)行。
編程實(shí)例
下面以火車訂票系統(tǒng)為例來說明該方法的具體實(shí)現(xiàn)過程?;疖囉喥毕到y(tǒng)中站名、車次、各停*站及其停車時(shí)間等數(shù)據(jù)被設(shè)計(jì)存放在數(shù)據(jù)庫(kù)中。由于車次、站名的增減、停車時(shí)間的變更等信息不會(huì)頻繁地發(fā)生變化,具有相對(duì)的穩(wěn)定性,所以可以在數(shù)據(jù)需要變更時(shí)由系統(tǒng)管理員一次性執(zhí)行一段代碼,從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)并生成若干HTML代碼的“靜態(tài)”引用文件,供需要站名、車次、停*站、停車時(shí)間的各個(gè)Web頁(yè)面引用。只有到下次鐵路系統(tǒng)再次調(diào)整時(shí)間、車次等信息時(shí),系統(tǒng)管理員才有必要修改數(shù)據(jù)庫(kù)中的數(shù)據(jù),重新生成并覆蓋原有的HTML代碼“靜態(tài)”引用文件,而引用該“靜態(tài)”代碼的各個(gè)Web頁(yè)面則無需任何修改。
下面以其中“站名”為例,說明“靜態(tài)”代碼的生成以及各Web頁(yè)面對(duì)此“靜態(tài)”代碼的引用方法。設(shè)系統(tǒng)采用Access數(shù)據(jù)庫(kù)train.mdb,表名為tab_train,“站名”字段為stations。首先從數(shù)據(jù)庫(kù)中讀取“站名”并生成“靜態(tài)”HTML代碼的ASP程序,然后把生成的“靜態(tài)”代碼保存到文件stations.inc中。
/*make_stations.asp*/
<%
Set fso = Server.CreateObject("Scripting.FileSystemObject")
FilePath = Server.MapPath(“station.inc”)
Set file = fso.CreateTextFile(FilePath)
Set conn = server.CreateObject(“ADODB.Connection”)
DBPath = Server.MapPath(“train.mdb”)
conn.Open “driver={Microsoft Access Driver (*.mdb)}; dbq=”& DBPath
sql = “select stations from tab_train”
Set rs = conn.Execute(sql)
line = “function put_stations(){”
file.WriteLine line
line = “document.writeln(‘ ” & “ <select name = ‘stations’ >’)”
file.WriteLine line
While Not rs.EOF
line = “document.write(‘<option >” & rs(“stations”) & “</option>’)”
file.WriteLine line
rs.MoveNext
Wend
line = “document.write(‘</select>’) }”
file.WriteLine line
file.close
%>
引用“靜態(tài)”的“站名”的HTML頁(yè)面如下:
< html >
< head >
< title >引用stations.inc文件</title>
< !--include file=“stations.inc”-- >
< /head >
< body >
< table >
< tr >< td >
< script language=“javascript”> put_stations() < /script >
< /td >< /tr >
< /table >
</body>
</html>
小 結(jié)
在make_stations.asp程序代碼中,采用了生成“函數(shù)”的方法,這樣設(shè)計(jì)的好處是可以在其他頁(yè)面的任何布局位置上引用該“函數(shù)”。在稍復(fù)雜的Web數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)中,一般都或多或少地存在著某些“不會(huì)頻繁地發(fā)生變化,具有相對(duì)的穩(wěn)定性”的信息,對(duì)這些信息進(jìn)行“靜態(tài)”優(yōu)化,可以顯著地提高Web數(shù)據(jù)庫(kù)的訪問速度。當(dāng)然,對(duì)需要反映數(shù)據(jù)庫(kù)中當(dāng)前數(shù)據(jù)狀態(tài)的查詢統(tǒng)計(jì)頁(yè)面是不能進(jìn)行“靜態(tài)”優(yōu)化的。