計數器|最佳化 很多的網站都有記數器,用來記錄網站的訪問量,這給網站管理員即時瞭解本網站的運行及訪問情況提供了很多的方便。筆者研究過很多用ASP編寫的計數器程式,發現大部份都是在一個訪客訪問網站的時候就打文字檔或資料庫,讀取以前的計數值進行加1,然後再寫入檔案,若網站訪問量很大,可能會對系統造成很大的負擔,那麼有沒有最佳化的方法呢,筆者經過研究測試,答案是:有。
熟悉ASP的朋友都知道,ASP提供一個Application屬性用來儲存伺服器的一些公開變數,我們可以用這個變數來儲存記數器的資訊。
思路是先設定兩個Application變數,一個Application(“TotalCount”),用來儲存記數值;另一個Application(“LastwriteTime”),用來儲存上次把記數值儲存到檔案的時間。我們可以自己定義把計數值儲存到檔案的間隔時間,比如1小時、1天或者一個月。在有訪客訪網站的時候,讓Application(“TotalCount”)進行加1,如果上次儲存計數的時間與現在的時間差大於我們設定的儲存時間間隔值,那麼就把當前的計數值寫入檔案儲存,這樣就減少了程式的IO操作,節約了系統的負擔。
為了避免發生意外,如斷電或者伺服器停止反應需待重啟等,我們可以設定儲存時間間隔為2小時,這樣即使發生意外,損失也不會太大。
常式如下:
<%
Dim oFSO ''定義FSO組件對象
Dim oFile ''定義讀寫檔案對象
Dim nCount ''定義從檔案中讀取的記數值
Dim sFilePath ''定義計數器儲存檔案的路徑
Const iInterval=2 ''定義儲存時間間隔為2小時
SFilePath=Server.MapPath("Count/Count.txt") ''假設計數器檔案在根目錄下的Count目錄中,檔案名稱為Count.txt
IF Application("TotalCount")=0 or Application("TotalCount")="" THEN
''如果第一次運行網站,比如重啟後,我們就需要從檔案中讀取出以前的計數值
Set oFSO=Server.CreateObject("Scripting.FileSystemObject") ''執行個體化檔案操作對象oFSO
IF not oFSO.FileExists(sFilePath) THEN
OFile=oFSO.CreateTextFile(sFilePath,true) ''如果檔案不存在,則建立一個文
件
oFile.Write("1") 寫入當前的計數值"1"
oFile.close
Application("TotalCount")=1
ELSE
Set oFile = oFSOt.OpenTextFile(sFilePath)
NCount=OFile.ReadLine
Application("TotalCount")=Clng(nCount)+1
OFile.close
End IF
Application("LastwriteTime")= Now ''設定最後一次訪問的時間為目前時間
ELSE
Application("TotalCount")= Application("TotalCount")+1
IF DateDiff("H", Application("LastwriteTime"),Now)>iInterval THEN
''如果目前時間與上次儲存計數值的時間差大於設定的時間間隔,則把計數值重新寫入檔案
Set oFSO=Server.CreateObject("Scripting.FileSystemObject") ''執行個體化檔案操作對象oFSO
OFile=oFSO.OpenTextFile(sFilePath,true) ''開啟檔案
oFile.Write(Application("TotalCount")) ''寫入當前的計數值
oFile.close
Application("LastwriteTime")= Now ''設定最後一次訪問的時間為目前時間
END IF
End IF
Response.Write("歡迎光臨本網站,你是訪問本網站的第" & Application("TotalCount") & "位訪客!")
%>
本常式在Windows2000 IIS5.0下通過。