- 浏览: 6868344 次
- 性别:
- 来自: 上海
最新评论
-
autosuggestion:
实现一个智能提示功能需要JavaScript、ajax、数据库 ...
自动提示结果 -
岁月之眸:
...
Java读TXT文件 -
yujian58:
写的好。
在线客服技术方案 -
QQ1067184821:
你好,能不能发个完整的给我呢?1067184821@qq.co ...
Extjs3.2+Json lib动态树与GridPanel简单展现 -
chenhua0725:
能不能发一个完成的包给我呢,谢谢了,83667664@qq.c ...
Extjs3.2+Json lib动态树与GridPanel简单展现
打造一个高性能稳定的web站点一直是站长和程序员的梦想,本文用作者的一次亲身经历的来说说如何利用xml缓存技术实现站点的高性能。我是从今年开始做138手机主题网的,采用SQL2000做为数据库,开发语言用的是Asp,查询的时候都是动态查询,直接用like %的方式,那个时候反正一天的访问量小,同时在线的时候也就几十个人而已,所以服务器也就能胜任要求,随着访问量慢慢增加,当同时在线达到几百人时,此时服务器开始不堪重负,CPU常常达到100%不降,网页打开速度也超级慢,一个查询页面需要几秒钟甚至更长,于是我开始考虑优化程序和数据库,数据库建立索引,不是很理想,因为用的是like '% 这种方式,于是我想到了缓存,而xml本身的特点决定了他非常适合做数据库的缓存,好东西不敢独享,特发布出来,以便同行交流,共同进步。
实现的思路是这样的:程序读取信息时,先判断是否缓存了xml数据,如果有,则直接从xml中读取信息,否则从数据库中读取,并将此次结果生成xml文件,以便以后调用,加快速度,同时判断xml缓存文件是否过期,如果过期则需要重新生成xml。下面是具体的代码。
xmlcachecls.asp
<%
Rem xml数据缓存类
'--------------------------------------------------
'转载的时候请保留版权信息
'作者:walkman
'网址:手机主题 http://www.shouji138.com
'版本:ver1.0
'欢迎各位交流进步
'--------------------------------------------------
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路径,用绝对地址
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
'返回记录数组
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("Scripting.FileSystemObject")
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,"<","<")
str = Replace(str,">",">")
str = Replace(str,"'","'")
str = Replace(str,"""",""")
str = Replace(str,"&","&")
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
'网址:手机主题 http://www.shouji138.com
'版本:ver1.0
'欢迎各位交流进步
'--------------------------------------------------
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="http://www.shouji138.com<%=SQLArr(2,m)%>" width="107" border="0"></a>
</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几毫秒。
发表评论
-
一个用ASP生成html的新方法
2008-12-07 19:59 819标签: 目前已经有很多生成html的新闻系统,但是都是用的模板 ... -
ASP读取文本并在特定的字符后面写入一段字符串
2008-12-08 10:09 1124http://www.corange.cn/archives/ ... -
是否支持XmlHttp组件的判断
2008-12-08 15:09 1072<% On Error Resume Next Resp ... -
ASP对XML文档中文本的增加、删除、修改、查看
2008-12-08 15:11 1001<% '------------------------ ... -
asp获取文件md5值
2008-12-08 20:49 1282网上asp加密字符的MD5很 ... -
利用ASP获得图象的实际尺寸的示例
2008-12-12 16:32 892<!--#includevirtual=" ... -
asp阻止灌水留言的方法(随机生成的4位认证码)(
2008-12-17 23:34 1053原理:在每次提交留言的时候,要输入随机生成的4位认证码. 以下 ... -
ASP实现SQL语句日期格式的加减运算
2008-12-18 10:09 1440需要按时间查询,可是查询出来的结果显示的不正确。举个例子来说, ... -
ASP循环导入导出数据处理 不使用缓存
2009-01-13 11:30 977<% '//数据处理部分 dimContent ... -
asp之自动闭合HTML/ubb标签函数+简单注释
2009-01-13 11:34 1096程序代码 FunctioncloseUBB(strCont ... -
aspjpeg 半透明描边的实现函数
2009-01-13 22:36 1339'参数说明 'big 原图路径 ... -
Session对象的集合
2009-01-15 18:13 1047Session StaticObjects 集合 Static ... -
根据IP跳转到用户所在城市
2009-01-20 12:38 1506根据IP跳转到用户所在城市自动识别IP,并跳转到来访问者所在的 ... -
asp实现关键词不区分大小写搜索并高亮显示
2009-03-04 13:25 1299用ASP做搜索很容易,但要实现智能搜索这类就比较累一点,其实任 ... -
远程连接access数据库的几个方法
2009-06-03 21:16 902远程连接access数据库的几个方法: 1.建立VPN(Vir ... -
ASP-server.URLEncode反函数:urldecode
2009-06-08 08:50 1486如果有空格就用%20代替,如果有其它字符就用%ASCII代替, ... -
ASP动态包含文件的改进方法,ASP动态include
2009-06-10 12:30 1785ASP 本身不支持动态包含文件,现在的动态包含是通过 FSO ... -
ASP读取数据库中数据到数组的类
2009-06-10 12:31 1740DbPath = "test.mdb"’数 ... -
ASP中双引号单引号和&连接符使用技巧
2009-06-18 10:11 1374ASP中双引号单引号和&连接符使用技巧 一、ASP中处 ... -
HTML中提取图片的SRC路径
2009-06-26 10:02 1414Public Function CheckName(Str) ...
相关推荐
5.2.2 使用require()制作Web站点的模版 5.2.3 使用auto_prepend_file和auto_append_file 5.3 在PHP中使用函数 5.3.1 调用函数 5.3.2 调用未定义的函数 5.3.3 理解字母大小写和函数名称 5.4 理解为什么要定义...
5.2.2 使用require()制作Web站点的模版 5.2.3 使用auto_prepend_file和auto_append_file 5.3 在PHP中使用函数 5.3.1 调用函数 5.3.2 调用未定义的函数 5.3.3 理解字母大小写和函数名称 5.4 理解为什么要定义自己的...
《ASP.NET 4高级程序设计(第4版)》是ASP.NET领域的鸿篇巨制,全面讲解了ASP.NET4的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的建议。书中还深入讲述了其他ASP.NET图书...
本书介绍了ASP.NET 2.0中的每个新增特性和功能,以便读者把这些新技术应用于实践。.. 本书主要内容 ● 服务器控件的概念及其在ASP.NET开发中的主导作用 ● 使用新的Master页面特性创建模板化的ASP.NET页面 ● ...
ASP.NET 4高级程序设计(第4版)》【原版书为:Pro ASP.NET 4 in C# 2010】是ASP.NET领域的鸿篇巨制,全面讲解了ASP.NET4的各种特性及其背后的工作原理,并给出了许多针对如何构建复杂、可扩展的网站从实践中得出的...
内容简介回到顶部↑ASP.NET具有开发效率高、平台无关性、安全性强等方面的优势,广泛用于创建动态Web站点和基于Web的分布式应用程序,是广大Windows程序员开发Web应用程序的有效工具。ASP.NET 2.0在Web应用程序...
5.2.2 使用require()制作Web站点的模版 5.2.3 使用auto_prepend_file和auto_append_file 5.3 在PHP中使用函数 5.3.1 调用函数 5.3.2 调用未定义的函数 5.3.3 理解字母大小写和函数名称 5.4 理解为什么要定义...
3.1.4 Web站点需要 FrontPage Extensions42 3.2 ASP.NET页面结构选项43 3.2.1 内置编码44 3.2.2 新的后台编码模型46 3.3 ASP.NET 2.0的Page指令48 3.3.1 @Page49 3.3.2 @Master51 3.3.3 @Control52 3.3.4 @Import...
3.1.1 缓存技术WebStorage 17 3.1.2 跨域交互缓存处理需求 17 3.1.3 页面回退管理需求 17 3.2 缓存处理机制 18 3.2.1 跨域缓存处理 18 3.2.2页面回退管理 18 3.3 模块实现 19 3.3.1跨域缓存机制的主要实现 19 3.3.2....
采用XHTML和CSS设计可重用可换肤的WEB站点 asp.net的网址重定向方法的比较:面向搜索引擎友好 也谈 ASP.NET 1.1 中 QueryString 的安全获取写法 ASP.NET运行模式:PageHandlerFactory 利用搜索引擎引用来高亮页面...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...
利用Google:maps JSP标签库就能够在你的Web站点上实现GoogleMaps的所有功能而且不需要javascript或AJAX编程。它还能够与JSTL相结合生成数据库驱动的动态Maps。 OAuth 实现框架 Agorava Agorava 是一个实现了 OAuth ...