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

用ASP編寫計(jì)數(shù)器的優(yōu)化方法

[摘要]很多的網(wǎng)站都有記數(shù)器,用來記錄網(wǎng)站的訪問量,這給網(wǎng)站管理員即時(shí)了解本網(wǎng)站的運(yùn)行及訪問情況提供了很多的方便。筆者研究過很多用ASP編寫的計(jì)數(shù)器程序,發(fā)現(xiàn)大部份都是在一個(gè)訪客訪問站點(diǎn)的時(shí)候就打文本文件或...

    很多的網(wǎng)站都有記數(shù)器,用來記錄網(wǎng)站的訪問量,這給網(wǎng)站管理員即時(shí)了解本網(wǎng)站的運(yùn)行及訪問情況提供了很多的方便。筆者研究過很多用ASP編寫的計(jì)數(shù)器程序,發(fā)現(xiàn)大部份都是在一個(gè)訪客訪問站點(diǎn)的時(shí)候就打文本文件或數(shù)據(jù)庫,讀取以前的計(jì)數(shù)值進(jìn)行加1,然后再寫入文件,若網(wǎng)站訪問量很大,可能會(huì)對(duì)系統(tǒng)造成很大的負(fù)擔(dān),那么有沒有優(yōu)化的方法呢,筆者經(jīng)過研究測試,答案是:有。

    熟悉ASP的朋友都知道,ASP提供一個(gè)Application屬性用來保存服務(wù)器的一些公共變量,我們可以用這個(gè)變量來保存記數(shù)器的信息。

    思路是先設(shè)定兩個(gè)Application變量,一個(gè)Application(“TotalCount”),用來保存記數(shù)值;另一個(gè)Application(“LastwriteTime”),用來保存上次把記數(shù)值保存到文件的時(shí)間。我們可以自己定義把計(jì)數(shù)值保存到文件的間隔時(shí)間,比如1小時(shí)、1天或者一個(gè)月。在有訪客訪網(wǎng)站的時(shí)候,讓Application(“TotalCount”)進(jìn)行加1,如果上次保存計(jì)數(shù)的時(shí)間與現(xiàn)在的時(shí)間差大于我們?cè)O(shè)定的保存時(shí)間間隔值,那么就把當(dāng)前的計(jì)數(shù)值寫入文件保存,這樣就減少了程序的IO操作,節(jié)約了系統(tǒng)的負(fù)擔(dān)。

    為了避免發(fā)生意外,如斷電或者服務(wù)器停止反應(yīng)需待重啟等,我們可以設(shè)定保存時(shí)間間隔為2小時(shí),這樣即使發(fā)生意外,損失也不會(huì)太大。

例程如下:

<%

Dim oFSO   '定義FSO組件對(duì)象

Dim oFile  '定義讀寫文件對(duì)象

Dim nCount '定義從文件中讀取的記數(shù)值

Dim sFilePath '定義計(jì)數(shù)器保存文件的路徑

Const iInterval=2 '定義保存時(shí)間間隔為2小時(shí)

SFilePath=Server.MapPath("Count/Count.txt")  '假設(shè)計(jì)數(shù)器文件在根目錄下的Count目錄中,文件名為Count.txt

IF  Application("TotalCount")=0 or Application("TotalCount")="" THEN

'如果第一次運(yùn)行網(wǎng)站,比如重啟后,我們就需要從文件中讀取出以前的計(jì)數(shù)值

   Set oFSO=Server.CreateObject("Scripting.FileSystemObject") '實(shí)例化文件操作對(duì)象oFSO

      IF not oFSO.FileExists(sFilePath) THEN

          OFile=oFSO.CreateTextFile(sFilePath,true)  '如果文件不存在,則創(chuàng)建一個(gè)文

      oFile.Write("1")   寫入當(dāng)前的計(jì)數(shù)值"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  '設(shè)置最后一次訪問的時(shí)間為當(dāng)前時(shí)間

 

ELSE

      Application("TotalCount")= Application("TotalCount")+1

      IF DateDiff("H", Application("LastwriteTime"),Now)>iInterval THEN

       '如果當(dāng)前時(shí)間與上次保存計(jì)數(shù)值的時(shí)間差大于設(shè)定的時(shí)間間隔,則把計(jì)數(shù)值重新寫入文件

           Set oFSO=Server.CreateObject("Scripting.FileSystemObject") '實(shí)例化文件操作對(duì)象oFSO

           OFile=oFSO.OpenTextFile(sFilePath,true)  '打開文件

           oFile.Write(Application("TotalCount"))   '寫入當(dāng)前的計(jì)數(shù)值

           oFile.close

           Application("LastwriteTime")= Now  '設(shè)置最后一次訪問的時(shí)間為當(dāng)前時(shí)間

       END IF

End IF

Response.Write("歡迎光臨本網(wǎng)站,你是訪問本網(wǎng)站的第" & Application("TotalCount") & "位訪客!")

%>

本例程在Windows2000 IIS5.0下通過。