亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

實踐xml緩存技術構建高性能web站點

2019-11-17 04:29:04
字體:
來源:轉載
供稿:網友

打造一個高性能穩定的web站點一直是站長和程序員的夢想,本文用作者的一次親身經歷的來說說如何利用xml緩存技術實現站點的高性能。我是從今年開始做138手機主題網的,采用SQL2000做為數據庫,開發語言用的是asp,查詢的時候都是動態查詢,直接用like %的方式,那個時候反正一天的訪問量小,同時在線的時候也就幾十個人而已,所以服務器也就能勝任要求,隨著訪問量慢慢增加,當同時在線達到幾百人時,此時服務器開始不堪重負,CPU常常達到100%不降,網頁打開速度也超級慢,一個查詢頁面需要幾秒鐘甚至更長,于是我開始考慮優化程序和數據庫,數據庫建立索引,不是很理想,因為用的是like '% 這種方式,于是我想到了緩存,而xml本身的特點決定了他非常適合做數據庫的緩存,好東西不敢獨享,特發布出來,以便同行交流,共同進步。
實現的思路是這樣的:程序讀取信息時,先判斷是否緩存了xml數據,如果有,則直接從xml中讀取信息,否則從數據庫中讀取,并將此次結果生成xml文件,以便以后調用,加快速度,同時判斷xml緩存文件是否過期,如果過期則需要重新生成xml。下面是具體的代碼。
xmlcachecls.asp
<%
Rem xml數據緩存類
'--------------------------------------------------
'轉載的時候請保留版權信息
'作者:walkman
'網址:手機主題 Class XmlCacheCls
 Rem 私有變量定義
 
PRivate m_CacheTime  '緩存時間,單位秒
 Private m_PageSize  '每頁大小
 Private m_CachePageNum 'xml緩存頁大小
 Private m_XmlFile  'xml路徑,用絕對地址,不需要加擴展名
 Private m_Sql   'SQL語句
 Private m_TableName  '表名或者視圖名
 Private m_Columns  '列名 用,隔開
 Private m_CurPage  '當前頁
 Private m_CacheType  '緩存類型:1,列表 2,詳情
 Private m_DataConn  '數據源,必須已經打開
 Private m_QueryType  '查詢類型:1,直接用sql 2,用存儲過程
 Private m_SQLArr  '返回的數據數組
 Private m_RecordCount
 
 
 Rem 公共屬性
 '緩存時間
 Public Property Let  CacheTime(v)
  m_CacheTime = v
 End Property
 Public Property Get  CacheTime
  CacheTime = m_CacheTime
 End Property
 
 '每頁大小
 Public Property Let  PageSize(v)
  m_PageSize = v
 End Property
 Public Property Get  PageSize
  PageSize = m_PageSize
 End Property
 
 'xml緩存頁大小
 Public Property Let  CachePageNum(v)
  m_CachePageNum = v
 End Property
 Public Property Get  CachePageNum
  CachePageNum = m_CachePageNum
 End Property
 
 'xml路徑,用絕對地址
 Public Property Let  XmlFile(v)
  m_XmlFile = v
 End Property
 Public Property Get  XmlFile
  XmlFile = m_XmlFile
 End Property

 'xml路徑,用絕對地址
 'http://www.49028c.com/article.asp?typeid=2
 Public Property Let  Sql(v)
  m_Sql = v
 End Property
 Public Property Get  Sql
  Sql = m_Sql
 End Property

 '表名或者視圖名
 Public Property Let  TableName(v)
  m_TableName = v
 End Property
 Public Property Get  TableName
  TableName = m_TableName
 End Property
 
 '列名 用,隔開
 Public Property Let  Columns(v)
  m_Columns = v
 End Property
 Public Property Get  Columns
  Columns = m_Columns
 End Property
 
 '當前頁
 Public Property Let  CurPage(v)
  m_CurPage = v
 End Property
 Public Property Get  CurPage
  CurPage = m_CurPage
 End Property


 '緩存類型:1,列表 2,詳情
 Public Property Let  CacheType(v)
  m_CacheType = v
 End Property
 Public Property Get  CacheType
  CacheType = m_CacheType
 End Property
 
 '緩存類型:1,列表 2,詳情
 Public Property Set  Conn(v)
  Set m_DataConn = v
 End Property
 Public Property Get  Conn
  Conn = m_DataConn
 End Property

 '返回記錄總數
 Public Property Get  RecordCount
  RecordCount = m_RecordCount
 End Property
 '返回記錄數組
 'http://www.devdao.com/
 Public Property Get  SQLArr
  SQLArr = m_SQLArr
 End Property

 Rem 公共方法 讀取數據
 Public Function ReadData
  If m_CacheType = 1 Then
   ReadListAndSearchData
  Else
   ReadContentData
  End If
 End Function
 
 Rem 讀取詳情信息
 Private Function ReadContentData
  Dim xmlfile
  xmlfile = m_XmlFile
  If fsoExistsFile(xmlfile) Then '存在xml緩存,直接從xml中讀取
   ReadContentDataFromXml xmlfile
  Else
   ReadContentDataFromDB
  End If
 End Function
 
 Rem 從xml文件讀取詳情信息
 Private Function ReadContentDataFromXml(xmlfile)
  Dim SQLARR()
  Dim XmlDoc
  Set XmlDoc = Server.CreateObject("msxml2.FreeThreadedDOMDocument.3.0")
  XmlDoc.Load xmlfile
  Dim itemslength,itemsi
  itemslength = XmlDoc.documentElement.childNodes.length
  For itemsi=0 To itemslength-1
   ReDim Preserve SQLARR(itemslength-1,0)
   SQLARR(itemsi,0) = XmlDoc.documentElement.childNodes(itemsi).text
  Next
  Set XmlDoc = Nothing
  m_SQLArr = SQLArr
 End Function
 
 Rem 從Db中讀取詳情信息
 Private Function ReadContentDataFromDB()
  Dim rs
  Dim SQLARR
  Set rs = m_DataConn.execute(m_sql)
  IF Not Rs.eof Then
   SQLArr=Rs.GetRows(1)
   rs.close
   Set rs = Nothing
  Else
   rs.close
   Set rs = Nothing
   Exit Function
  End If
  m_SQLArr = SQLArr
 End Function

 Rem 讀取列表數據
 Private Function ReadListAndSearchData
  Dim sPagesize,TotalPage,CurPage,TotalRec
  sPagesize = m_PageSize * m_CachePageNum
  m_CurPage = CLng(m_CurPage)
 
  If m_CurPage Mod m_CachePageNum = 0 Then
   CurPage = m_CurPage/m_CachePageNum
  Else
   CurPage = int(clng(m_CurPage)/m_CachePageNum)+1
  End If
  Dim xmlfile
  xmlfile = getXmlFileName(CurPage)
  If FSOExistsFile(xmlfile) Then '存在xml緩存,直接從xml中讀取
   ReadListAndSearchDataFromXml xmlfile
  Else
   ReadListAndSearchDataFromDB
  End If
 End Function
 Rem 從xml中讀列表數據
 Private Function ReadListAndSearchDataFromXml(xmlfile)
  Dim SQLARR()
  Dim XmlDoc
  Set XmlDoc = Server.CreateObject("msxml2.FreeThreadedDOMDocument.3.0")
  XmlDoc.Load xmlfile
  Dim totalrecont
  totalrecont = XmlDoc.documentElement.selectSingleNode("totalrec").text
  m_RecordCount = totalrecont
  Dim TotalRec
  TotalRec = m_RecordCount
  If totalrecont = 0 Then
   Set XmlDoc = Nothing
   m_SQLArr = SQLARR
   Exit Function
  End If
  Dim TotalPage,curpage
  curpage = m_CurPage
  If m_CurPage Mod m_CachePageNum = 0 Then
   CurPage = m_CurPage/m_CachePageNum
  Else
   CurPage = int(clng(m_CurPage)/m_CachePageNum)+1
  End If
  If TotalRec Mod m_CachePageNum =0 Then
   TotalPage = totalrecont/m_CachePageNum
  Else
   TotalPage = int(clng(totalrecont)/m_CachePageNum)+1
  End If
 
  If curpage>TotalPage Then curpage=TotalPage
  Dim starti
  Dim startn
  startn = m_curpage - (curpage-1) * m_CachePageNum
  Rem 計算開始位置
  starti = (startn-1) * m_pagesize
  Dim items,item
  Set items = XmlDoc.documentElement.SelectNodes("item")
  Dim i
  Dim num
  Dim length
  length = items.length
  num = 0
  For i = starti To m_PageSize + starti -1
   If i >=length Then Exit For
   Set item = items(i)
   Dim attrlength
   attrlength = item.attributes.length
   ReDim Preserve SQLARR(attrlength,num)
   Dim Attribute
   Dim Attributei
   Attributei = 0
   For Attributei = 0 To attrlength-1
    SQLArr(Attributei,num) = item.attributes(Attributei).Nodevalue
   Next  
   num = num + 1
  Next
  Set XmlDoc = Nothing
  m_SQLArr = SQLArr
 End Function
 
 Rem 從DB中讀列表數據
 Private Function ReadListAndSearchDataFromDB
  Dim rs,TotalRec,CurPage
  CurPage = m_CurPage
  Set Rs = Server.CreateObject("Adodb.Recordset")
  Rs.open m_sql,m_DataConn,1
  TotalRec = rs.recordcount
  m_RecordCount = TotalRec
  rs.pagesize = m_PageSize
  If  CurPage>rs.PageCount Then  CurPage = rs.PageCount
  If Not rs.eof Then rs.absolutePage=m_CurPage
  Dim SQLARR()
  Dim k
  k = 0
  While Not rs.eof and k<m_PageSize
   Dim fieldlegth
   fieldlegth = rs.Fields.count
   ReDim Preserve SQLARR(fieldlegth,k)
  
   Dim fieldi
   For fieldi = 0 To fieldlegth-1
    SQLArr(fieldi,k) = rs.Fields(fieldi).value
   Next
   rs.movenext
   k=k+1
  Wend
  rs.close
  Set rs = Nothing
  m_SQLArr = SQLArr
 End Function

 Rem 獲取xml文件名稱
 Private Function getXmlFileName(num)
  Dim tmpstr
  tmpstr = LCase(m_XmlFile)
  If Right(tmpstr,4) = ".xml" Then
   tmpstr = Left(tmpstr,Len(tmpstr)-Len(".xml"))
  End If
  tmpstr = Replace(tmpstr,"%","_")
  tmpstr = tmpstr & "_" & num & ".xml"
  getXmlFileName = tmpstr
 End Function
 
 Rem 公共方法 將數據寫入xml文件
 Public Function WriteDataToXml
  If m_CacheType = 1 Then
   WriteListAndSearchDataToXml
  Else
   WriteContentDataToXml
  End If
 End Function

 Rem 寫具體某條信息的詳情xml
 Private Function WriteContentDataToXml
  Rem xml未過期則直接退出
  Dim xmlfile
  xmlfile = m_XmlFile
  If FSOExistsFile(xmlfile) Then
   If Not isXmlCacheExpired(xmlfile,m_CacheTime) Then  Exit Function
  End If
  Dim rs
  Set rs = Server.CreateObject("Adodb.Recordset")
  Rs.open m_sql,m_DataConn
  CreateContentXmlFile xmlfile,Rs
 End Function

 Rem 列表和搜索xml數據
 Private Function WriteListAndSearchDataToXml
 
  Dim sPagesize,TotalPage,CurPage,TotalRec
  sPagesize = m_PageSize * m_CachePageNum
  m_CurPage = CLng(m_CurPage)
 
  If m_CurPage Mod m_CachePageNum = 0 Then
   CurPage = m_CurPage/m_CachePageNum
  Else
   CurPage = int(clng(m_CurPage)/m_CachePageNum)+1
  End If
  Dim xmlfile
  xmlfile = getXmlFileName(CurPage)
  Rem 如果xml未過期則直接退出
  If FSOExistsFile(xmlfile) Then
   If Not isXmlCacheExpired(xmlfile,m_CacheTime) Then  Exit Function
  End If
  Dim rs
  Set Rs = Server.CreateObject("Adodb.Recordset")
  Rs.open m_sql,m_DataConn,1
  TotalRec = rs.recordcount
  rs.pagesize = sPagesize
  If  CurPage>rs.PageCount Then  CurPage = rs.PageCount
  CreateListAndSearchXMLFile xmlfile,TotalRec,Rs,sPagesize
 End Function
 
 Rem 私有方法
 Rem 得到文件的最后修改時間
 Private Function FSOGetFileLastModifiedTime(file)
  Dim fso,f,s  
  Set fso=CreateObject("Scr  Set f=fso.GetFile(file)  
  FSOGetFileLastModifiedTime = f.DateLastModified
  Set f = Nothing
  Set fso = Nothing
 End Function

 Rem 判斷xml緩存是否到期
 Private Function isXmlCacheExpired(file,seconds)
  Dim filelasttime
  filelasttime = FSOGetFileLastModifiedTime(file)
  If DateAdd("s",seconds,filelasttime) < Now Then
   isXmlCacheExpired = True
  Else
   isXmlCacheExpired = False
  End If
 End Function
 Rem 文件是否存在
 Private Function FSOExistsFile(file)
  Dim fso
  Set fso = Server.CreateObject("Scripting.FileSystemObject")
  If fso.FileExists(file) Then
   FSOExistsFile = true
  Else
   FSOExistsFile = false
  End If
  Set fso = nothing
 End Function
 
 Rem 生成詳細數據的xml
 Private Function CreateContentXmlFile(xmlfile,Rs)
  Dim xmlcontent
  xmlcontent = "<?xml version=""1.0"" encoding=""gb2312""?>" & vbnewline
  xmlcontent = xmlcontent & "<root>" & vbnewline
 
  Dim field
  For Each field In rs.Fields
   xmlcontent = xmlcontent & "<"&field.name&">"
   Dim value
   value = field.value
   If TypeName(value) = "String" Then
    xmlcontent = xmlcontent & "<![CDATA[" & Trim(value) & "]]>"
   Else
    xmlcontent = xmlcontent &  Trim(value)
   End If
   xmlcontent = xmlcontent & "</"&field.name&">" & vbnewline
  Next
  rs.close
  Set rs = Nothing
  xmlcontent = xmlcontent & "</root>" & vbnewline
 
  Dim folderpath
  folderpath = Trim(left(xmlfile,InstrRev(xmlfile,"/")-1))
  Call CreateDIR(folderpath&"") '創建文件夾
  WriteStringToXMLFile xmlfile,xmlcontent
 End Function

 Rem 生成列表的xml
 Private Function CreateListAndSearchXMLFile(xmlfile,TotalRec,Rs,sPagesize)
  Dim xmlcontent
  xmlcontent = ""
  xmlcontent = xmlcontent & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbnewline
  xmlcontent = xmlcontent & " <root>" & vbnewline
  xmlcontent = xmlcontent & "  <totalrec>" & TotalRec & "</totalrec>" & vbnewline
  Dim k
  k = 0
  Dim field
  While Not rs.eof and k<sPagesize
   xmlcontent = xmlcontent & "  <item "
   For Each field In rs.Fields
    xmlcontent = xmlcontent & field.name & "=""" & XMLStringEnCode(field.value) & """ "
   Next
   xmlcontent = xmlcontent &  "></item>" & vbnewline
   rs.movenext
   k=k+1
  Wend
  rs.close
  Set rs = Nothing
  xmlcontent = xmlcontent & " </root>" & vbnewline
  Dim folderpath
  folderpath = Trim(left(xmlfile,InstrRev(xmlfile,"/")-1))
  Call CreateDIR(folderpath&"") '創建文件夾
  WriteStringToXMLFile xmlfile,xmlcontent
 End Function
 Rem xml轉義字符
 Private Function XMLStringEnCode(str)
  If str&"" = "" Then XMLStringEnCode="":Exit Function
  str = Replace(str,"<","&lt;")
  str = Replace(str,">","&gt;")
  str = Replace(str,"'","&apos;")
  str = Replace(str,"""","&quot;")
  str = Replace(str,"&","&amp;")
  XMLStringEnCode = str
 End Function
 Rem 寫文件
 Private Sub WriteStringToXMLFile(filename,str)
  'On Error Resume Next
  Dim fs,ts
  Set fs= createobject("scripting.filesystemobject")
  If Not IsObject(fs) Then Exit Sub  
  Set ts=fs.OpenTextFile(filename,2,True)
  ts.writeline(str)
  ts.close
  Set ts=Nothing
  Set fs=Nothing
 End Sub

 Rem 創建文件夾
 Private function CreateDIR(byval LocalPath)
  On  Error  Resume  Next
  Dim i,FileObject,patharr,path_level,pathtmp,cpath
  LocalPath = Replace(LocalPath,"/","/")
  Set  FileObject = server.createobject("Scripting.FileSystemObject")
  patharr = Split(LocalPath,"/")
  path_level = UBound (patharr)
  For  i = 0 To  path_level
   If  i=0 Then 
    pathtmp=patharr(0) & "/"
   Else 
    pathtmp = pathtmp & patharr(i) & "/"
   End If
   cpath = left(pathtmp,len(pathtmp)-1)
   If  Not  FileObject.FolderExists(cpath) Then
    'Response.write cpath
    FileObject.CreateFolder cpath
   End  If
  Next
  Set  FileObject = Nothing
  If  err.number<>0 Then
   CreateDIR = False
   err.Clear
  Else
   CreateDIR = True
  End  If
 End  Function
End Class
%>

此類包含兩種緩存方式:一種是基于列表方式的,如按照某個類別顯示信息、搜索某個關鍵詞進行顯示;另外一種是詳細頁面的緩存,如顯示具體的某篇文章。
此類與具體的業務邏輯無關,只負責xml數據的讀取和存儲,判斷是否緩存過期決定是否需要更新緩存。按照三層構架模式的話,它處于數據訪問層。

調用這個類的代碼:
Business.asp
<%
Rem xml數據緩存類業務邏輯層代碼
'--------------------------------------------------
'轉載的時候請保留版權信息
'作者:walkman
'網址:手機主題
Rem 根據classid取列表數據
Function GetListarr(classid,curpage,PageSize,CachePageNum,ByRef RecordCount)
 openConn
 Dim sql
 sql = "select thmid,thmname,picfileurl,win_theme.adddate from win_theme where  win_theme.ClassID="&classid&" order by thmid desc"
 Dim cache
 Set cache = new XmlCacheCls
 cache.PageSize = PageSize     '每頁N條記錄
 cache.CachePageNum = CachePageNum    '一個xml文件緩存M頁的數據量
 cache.XmlFile = Server.Mappath("xmlcache/classxml/list_"&classid&".xml")
 cache.Sql = sql
 cache.CurPage = curpage
 cache.CacheType = 1
 Set cache.Conn = conn
 cache.ReadData
 Dim SqlArr
 SQLArr = cache.SQLArr
 RecordCount = cache.RecordCount
 Set cache = Nothing
 GetListarr = SqlArr
End Function

Rem 根據classid生成xml緩存
Function CreateListxml(classid,curpage,PageSize,CachePageNum,CacheTime)
 Dim sql
 sql = "select thmid,thmname,picfileurl,win_theme.adddate from win_theme where  win_theme.ClassID="&classid&" order by thmid desc"
 Dim cache
 Set cache = new XmlCacheCls
 cache.CacheTime = CacheTime '緩存時間
 cache.PageSize = PageSize     '每頁N條記錄
 cache.CachePageNum = CachePageNum    '一個xml文件緩存M頁的數據量
 cache.XmlFile = Server.Mappath("xmlcache/classxml/list_"&classid&".xml")
 cache.Sql = sql
 cache.CurPage = curpage
 cache.CacheType = 1
 Set cache.Conn = conn
 cache.WriteDataToXml
 Set cache = Nothing
End Function

Rem 根據keyWord取列表數據
Function GetSearcharr(keyword,curpage,PageSize,CachePageNum,ByRef RecordCount)
 openConn
 Dim sql
 Dim sqlkey
 sqlkey = Replace(keyword,"'","")
 sql = "select thmid,thmname,picfileurl,win_theme.adddate from win_theme where  ThmName like '%"&sqlkey&"%' or ThmRange  like '%"&sqlkey&"%' or ThmInstro  like '%"&sqlkey&"%'  order by thmid desc"
 Dim cache
 Set cache = new XmlCacheCls
 cache.PageSize = PageSize     '每頁N條記錄
 cache.CachePageNum = CachePageNum    '一個xml文件緩存M頁的數據量
 cache.XmlFile = Server.Mappath("xmlcache/searchxml/list_"&Server.URlEncode(Replace(keyword,"'",""))&".xml")
 cache.Sql = sql
 cache.CurPage = curpage
 cache.CacheType = 1
 Set cache.Conn = conn
 cache.ReadData
 Dim SqlArr
 SQLArr = cache.SQLArr
 RecordCount = cache.RecordCount
 Set cache = Nothing
 GetSearcharr = SqlArr
End Function
 
Rem 根據keyword生成xml緩存
Function CreateSearchxml(keyword,curpage,PageSize,CachePageNum,CacheTime)
 Dim sql
 Dim sqlkey
 sqlkey = Replace(keyword,"'","")
 sql = "select thmid,thmname,picfileurl,win_theme.adddate from win_theme where  ThmName like '%"&sqlkey&"%' or ThmRange  like '%"&sqlkey&"%' or ThmInstro  like '%"&sqlkey&"%'  order by thmid desc"
 Dim cache
 Set cache = new XmlCacheCls
 cache.CacheTime = CacheTime '緩存時間
 cache.PageSize = PageSize     '每頁N條記錄
 cache.CachePageNum = CachePageNum    '一個xml文件緩存M頁的數據量
 cache.XmlFile =  Server.Mappath("xmlcache/searchxml/list_"&Server.URlEncode(Replace(keyword,"'",""))&".xml")
 cache.Sql = sql
 cache.CurPage = curpage
 cache.CacheType = 1
 Set cache.Conn = conn
 cache.WriteDataToXml
 Set cache = Nothing
End Function
Rem 根據classid取列表數據
Function GetDetailarr(thmid)
 openConn
 Dim sql
 sql = "select a.thmid,a.thmname,a.classid,b.classname,a.picfileurl,a.thmver,a.thmsize,a.thminstro,a.thmrange,a.thmfileurl,a.adddate from win_theme a,Win_Classify b where a.classid=b.classid and  a.thmid="&thmid&""
 Dim thmidmod
 thmidmod = thmid Mod 100
 
 Dim cache
 Set cache = new XmlCacheCls
 cache.XmlFile = Server.Mappath("xmlcache/detailxml/"&thmidmod&"/"&thmid&".xml")
 cache.Sql = sql
 cache.CacheType = 2
 Set cache.Conn = conn
 cache.ReadData
 Dim SqlArr
 SQLArr = cache.SQLArr
 Set cache = Nothing
 GetDetailarr = SqlArr
End Function
Rem 根據keyword生成xml緩存
Function CreateDetailxml(thmid,CacheTime)
 Dim sql
 sql = "select a.thmid,a.thmname,a.classid,b.classname,a.picfileurl,a.thmver,a.thmsize,a.thminstro,a.thmrange,a.thmfileurl,a.adddate from win_theme a,Win_Classify b where a.classid=b.classid and  a.thmid="&thmid&""
 Dim thmidmod
 thmidmod = thmid Mod 100
 Dim cache
 Set cache = new XmlCacheCls
 cache.CacheTime = CacheTime '緩存時間
 cache.XmlFile =  Server.Mappath("xmlcache/detailxml/"&thmidmod&"/"&thmid&".xml")
 cache.Sql = sql
 cache.CacheType = 2
 Set cache.Conn = conn
 cache.WriteDataToXml
 Set cache = Nothing
End Function

Rem 檢測動態數組是否已分配
Function   ismalloc(a)
 On   Error Resume Next
 Dim   i  
 i   =   UBound(a)
 If Err Then
 ismalloc = False
 Else
 ismalloc   =   True  
 End If 
End   Function 
 
Function showData(SQLArr)
 If Not  ismalloc(SQLArr) Then Exit Function
 Dim i,k
 Dim num
 num = 0
 i = UBound(SQLArr,1)
 k = UBound(SQLArr,2)
 Dim m,n
 For m = 0 To k
  num = num+1
 %>
 <ul class="listbox" onMouSEOver="overtb(this)" onMouseOut="outtb(this)">
<li>
<a title="<%=SQLArr(1,m)%>" href="detail.asp?id=<%=SQLArr(0,m)%>" target="_blank">
  <img height="140" alt="<%=SQLArr(1,m)%>" src="</li>
<li class="green bold">
<a title="<%=SQLArr(1,m)%>" href="detail.asp?id=<%=SQLArr(0,m)%>" target="_blank">
<%=walkgottopic(Trim(SQLArr(1,m)),18)%></a>
</li>
 <li><%=DateValue(SQLArr(3,m))%></li>
 </ul>
 <%
 next
End Function
%>
這個文件是業務邏輯層代碼,負責根據不同的業務邏輯來實現xml數據的讀取和寫入,并提供接口方法給web表現層調用。
具體的調用代碼:
list.asp
只顯示相關代碼。
<%
。。。。。。
Dim classid
classid = Request("classid")
If classid = "" Or (Not IsNumeric(classid)) Then Response.write "參數錯誤!":Response.End()
classid = CLng(classid)
Dim sPagesize,TotalPage,CurPage,TotalRec,CachePageNum
sPagesize = 20
CachePageNum = 10
CurPage = Trim(Request("page"))
IF CurPage="" Or (Not IsNumeric(CurPage)) Then
  CurPage=1
Else
  CurPage=Clng(CurPage)
End IF
Dim myarr
myarr = GetListarr(classid,CurPage,sPagesize,CachePageNum,TotalRec)
'總頁數
TotalPage = int(clng(TotalRec)/sPagesize*-1)*-1
If Clng(TotalRec)>0 Then
 showData myarr
End If
................
%>
最后在頁面最底部調用一個asp的script語句來更新xml緩存。
<script type="text/
javascript" src="setcache.asp?action=list&curpage=<%=curpage%>&classid=<%=classid%>"></script>

setcache.asp
相關代碼
<%
openconn
Dim action
action = Trim(Request("action"))&""
Dim curpage
curpage = Request("curpage")
Dim classid
Dim keyword
Dim thmid
If action = "list" Then
 classid = Request("classid")
 If classid="" Or (Not IsNumeric(classid)) Or curpage="" Or (Not IsNumeric(curpage)) Then
 Else
  CreateListxml CLng(classid),CLng(curpage),20,10,60 * 60 * 2  '創建分類的xml
 End If
ElseIf action = "search" Then
 keyword = Trim(Request("keyword"))
 If keyword=""  Then
 Else
  CreateSearchxml keyword,CLng(curpage),20,10,60 * 60 * 2  '創建搜索的xml
 End If
ElseIf action = "detail" Then
 thmid = Request("id")
 If thmid="" Or (Not IsNumeric(thmid))  Then
 Else
  CreateDetailxml CLng(thmid),60 * 60 * 2  '創建詳情的xml
 End If
End If
Call Closeconn
Response.write " "
Response.End
%>
至此,核心代碼都分享出來了,實踐證明,通過這樣的方式,我的138手機主題網的服務器的CPU占用率和內存占用率明顯下降,訪問速度也明顯提高,從以前的需要幾秒甚至10多秒,到現在只需要10幾毫秒。
為了方便大家理解其中的代碼,我特地做了一個demo,供同行學習交流。地址:http://www.shouji138.com/aspnet2/demo
此例程的完整下載包:http://www.shouji138.com/aspnet2/demo/xmlcachedemo.rar
本人QQ:441003232 歡迎大家交流共同進步。
也可以訪問本人的小站:手機主題:http://www.shouji138.com


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
高清亚洲成在人网站天堂| 一区二区三区动漫| 精品国产乱码久久久久酒店| 国产精品女人久久久久久| 欧美国产日本高清在线| 久久91精品国产91久久久| 欧美一级片免费在线| 亚洲国产欧美日韩精品| 欧美电影电视剧在线观看| 国产福利成人在线| 中文字幕成人在线| 在线播放国产一区二区三区| 日本免费久久高清视频| 波霸ol色综合久久| 亚洲天堂av电影| 欧美激情免费观看| 久久精品国产成人| 亚洲a∨日韩av高清在线观看| 亚洲第一精品福利| 国产精品第一视频| 日本久久久久久| 日韩视频亚洲视频| 亚洲欧美国内爽妇网| 日韩中文在线视频| 国产精品v片在线观看不卡| 久久免费视频在线| 欧美日韩亚洲天堂| 日韩电影中文 亚洲精品乱码| 91精品国产一区| 欧美一区二区.| 日本19禁啪啪免费观看www| 一区二区三区无码高清视频| 精品久久久久久久久久国产| 成人精品视频99在线观看免费| 亚洲精品黄网在线观看| 亚洲人成电影网站色| 久久久久久亚洲| 亚洲国产另类久久精品| 亚洲天堂久久av| 国产视频精品va久久久久久| 国产精品网站入口| 国产精品99一区| xxxxx成人.com| 欧美激情极品视频| 欧洲亚洲免费视频| 亚洲xxx大片| 亚洲精品国产suv| 亚洲黄色www网站| 97香蕉超级碰碰久久免费的优势| 亚洲成人久久电影| 国产ts人妖一区二区三区| 亚洲第一视频在线观看| 2020久久国产精品| 亚洲第一男人天堂| 亚洲精品美女免费| 成人福利在线观看| 国产精品美女无圣光视频| 亚洲欧美中文日韩在线v日本| 动漫精品一区二区| 国产精品久久久久久久久久尿| 日韩中文字在线| 51视频国产精品一区二区| 欧美一区二区三区精品电影| 亚洲香蕉伊综合在人在线视看| 精品久久久香蕉免费精品视频| 中文字幕亚洲无线码在线一区| 亚洲天堂免费观看| 在线观看欧美日韩国产| 国产女人精品视频| 欧美另类暴力丝袜| 成人福利网站在线观看| 欧美激情一区二区三级高清视频| 色偷偷av一区二区三区乱| 国产精品永久在线| 亚洲国产精品久久久久秋霞蜜臀| 久久久久久噜噜噜久久久精品| 欧美一区二区三区……| 91久久国产精品91久久性色| 国产成人亚洲综合91精品| 欧美黑人又粗大| 不卡在线观看电视剧完整版| 日韩欧美在线第一页| 热久久视久久精品18亚洲精品| 96精品视频在线| 欧美日韩国产91| 黄色91在线观看| 日韩精品一区二区三区第95| 久久久视频免费观看| 欧美在线视频在线播放完整版免费观看| 成人精品久久久| 亚洲欧美一区二区三区久久| 日韩69视频在线观看| 亚洲欧洲av一区二区| 日韩在线观看免费| 国产va免费精品高清在线| 伊人久久大香线蕉av一区二区| 夜夜躁日日躁狠狠久久88av| 国产精品99久久久久久白浆小说| 欧美午夜视频在线观看| 亚洲午夜久久久久久久| 亚洲电影免费观看| 国产精品日韩欧美大师| 成人美女免费网站视频| 亚洲欧洲国产精品| 亚洲男人天堂网| 九色精品免费永久在线| 中文字幕成人精品久久不卡| 国产精品久久久久999| 一区二区亚洲精品国产| 国产在线拍揄自揄视频不卡99| 久久精品国产精品亚洲| 国产综合色香蕉精品| xxxxx成人.com| 欧美亚洲另类在线| 日韩激情av在线播放| 一本一本久久a久久精品综合小说| 欧美日韩国产二区| 日本高清视频精品| 日本久久久久久久| 久久免费视频在线| 亚洲自拍欧美另类| 欧美刺激性大交免费视频| 久久久精品欧美| 亚洲精品成人av| 国产激情999| 国产精品久久99久久| 91夜夜揉人人捏人人添红杏| 91精品国产综合久久香蕉922| 亚洲国产精品久久久| 欧美精品激情blacked18| 亚洲国产欧美在线成人app| 青青草原成人在线视频| 久久中国妇女中文字幕| 国产免费一区二区三区在线能观看| 亚洲影院色在线观看免费| 国产91亚洲精品| 欧美激情按摩在线| 国产精品久久久91| 国产欧美一区二区白浆黑人| 91情侣偷在线精品国产| 91wwwcom在线观看| 国产精品扒开腿做爽爽爽男男| 亚洲天天在线日亚洲洲精| 欧美多人爱爱视频网站| 国产精品美女免费视频| 欧美成人高清视频| 久久免费在线观看| 成人精品视频久久久久| 国产精品视频男人的天堂| 亚洲视屏在线播放| 国产精品久久久久久久久久久久久| 98视频在线噜噜噜国产| 国产91精品高潮白浆喷水| 成人免费观看网址| 久久韩国免费视频| 亚洲精品永久免费| 成人有码在线视频| 欧美激情在线观看视频| 成人乱色短篇合集| 日韩成人av一区| 欧美夫妻性生活视频| 日韩av成人在线| 国产精品白嫩初高中害羞小美女| 成人www视频在线观看|