仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 385|回复: 8
打印 上一主题 下一主题

[学习教程] ASP网站制作之xml缓存类

[复制链接]
老尸 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:07:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。特性:

读取机制:主动判别有没有缓存了的xml文件,当xml文件存在数据,侧从xml猎取数据,反之从数据库读取;
缓存机制:依据xml文件保存工夫和用户自界说的缓存工夫判别缓存有没有过时,过时侧保存新的xml文件;

无效削减数据库查询读取次数,缓存数据量小读取更快

修正了一下,加了两个办法,利用更便利
以下是援用片断:
代码:
<%
Remxml缓存类
’--------------------------------------------------------------------
’转载的时分请保存版权信息
’作者:t⑥月の雨r
’博客:http://chthp.cnblogs.com/
’版本:ver1.0
’本类部分自创walkmanxml数据缓存类,利用更加便利接待列位交换前进
’--------------------------------------------------------------------
ClassXmlCacheCls
Privatem_DataConn’数据源,必需已翻开
Privatem_CacheTime’缓存工夫,单元秒默许10分钟
Privatem_XmlFile’xml路径,用相对地点,不必要加扩大名
Privatem_Sql’SQL语句
Privatem_SQLArr’(只读)前往的数据数组
Privatem_ReadOn’(只读)前往读取体例1-数据库2-xml检测用

’类的属性=========================================

’数据源
PublicPropertySetConn(v)
Setm_DataConn=v
EndProperty
PublicPropertyGetConn
Conn=m_DataConn
EndProperty

’缓存工夫
PublicPropertyLetCacheTime(v)
m_CacheTime=v
EndProperty
PublicPropertyGetCacheTime
CacheTime=m_CacheTime
EndProperty

’xml路径,用相对地点
PublicPropertyLetXmlFile(v)
m_XmlFile=v
EndProperty
PublicPropertyGetXmlFile
XmlFile=m_XmlFile
EndProperty

’Sql语句
PublicPropertyLetSql(v)
m_Sql=v
EndProperty
PublicPropertyGetSql
Sql=m_Sql
EndProperty
’前往纪录数组
PublicPropertyGetSQLArr
SQLArr=m_SQLArr
EndProperty

’前往读取体例
PublicPropertyGetReadOn
ReadOn=m_ReadOn
EndProperty

’类的析构=========================================

PrivateSubClass_Initialize()’初始化类
m_CacheTime=60*10’默许缓存工夫为10分钟
EndSub

PrivateSubClass_Terminate()’开释类

EndSub

’类的大众办法=========================================

Rem读取数据
PublicFunctionReadData
IfFSOExistsFile(m_XmlFile)Then’存在xml缓存,间接从xml中读取
ReadDataFromXml
m_ReadOn=2
Else
ReadDataFromDB
m_ReadOn=1
EndIf
EndFunction

Rem写进XML数据
PublicFunctionWriteDataToXml
IfFSOExistsFile(m_XmlFile)Then’假如xml未过时则间接加入
IfNotisXmlCacheExpired(m_XmlFile,m_CacheTime)ThenExitFunction
EndIf
Dimrs
Dimxmlcontent
Dimk
xmlcontent=""
xmlcontent=xmlcontent&"<?xmlversion=""1.0""encoding=""gb2312""?>"&vbnewline
xmlcontent=xmlcontent&"<root>"&vbnewline
k=0
SetRs=Server.CreateObject("Adodb.Recordset")
Rs.openm_sql,m_DataConn,1
WhileNotrs.eof
xmlcontent=xmlcontent&"<item"
ForEachfieldInrs.Fields
xmlcontent=xmlcontent&field.name&"="""&XMLStringEnCode(field.value)&""""
Next
rs.movenext
k=k+1
xmlcontent=xmlcontent&"></item>"&vbnewline
Wend
rs.close
Setrs=Nothing
xmlcontent=xmlcontent&"</root>"&vbnewline

Dimfolderpath
folderpath=Trim(left(m_XmlFile,InstrRev(m_XmlFile,"")-1))
CallCreateDIR(folderpath&"")’创立文件夹
WriteStringToXMLFilem_XmlFile,xmlcontent
EndFunction

’类的公有办法=========================================

Rem从Xml文件读取数据
PrivateFunctionReadDataFromXml
DimSQLARR()’数组
DimXmlDoc’XmlDoc工具
DimobjNode’子节点
DimItemsLength’子节点的长度
DimAttributesLength’子节点属性的长度
SetXmlDoc=Server.CreateObject("Microsoft.XMLDOM")
XmlDoc.Async=False
XmlDoc.Load(m_XmlFile)
SetobjNode=XmlDoc.documentElement’猎取根节点
ItemsLength=objNode.ChildNodes.length’猎取子节点的长度
Foritems_i=0ToItemsLength-1
AttributesLength=objNode.childNodes(items_i).Attributes.length’猎取子节点属性的长度
ForAttributes_i=0ToAttributesLength-1
ReDimPreserveSQLARR(AttributesLength-1,items_i)
SQLArr(Attributes_i,items_i)=objNode.childNodes(items_i).Attributes(Attributes_i).Nodevalue
Next
Next
SetXmlDoc=Nothing
m_SQLArr=SQLARR
EndFunction

Rem从数据库读取数据
PrivateFunctionReadDataFromDB
Dimrs
DimSQLARR()
Dimk
k=0
SetRs=Server.CreateObject("Adodb.Recordset")
Rs.openm_sql,m_DataConn,1
IfNot(rs.eofandrs.bof)Then
WhileNotrs.eof
Dimfieldlegth
fieldlegth=rs.Fields.count
ReDimPreserveSQLARR(fieldlegth,k)
Dimfieldi
Forfieldi=0Tofieldlegth-1
SQLArr(fieldi,k)=rs.Fields(fieldi).value
Next
rs.movenext
k=k+1
Wend
EndIf
rs.close
Setrs=Nothing
m_SQLArr=SQLArr
EndFunction

’类的帮助公有办法=========================================

Rem写xml文件
PrivateSubWriteStringToXMLFile(filename,str)
Dimfs,ts
Setfs=createobject("scripting.filesystemobject")
IfNotIsObject(fs)ThenExitSub
Setts=fs.OpenTextFile(filename,2,True)
ts.writeline(str)
ts.close
Setts=Nothing
Setfs=Nothing
EndSub

Rem判别xml缓存是不是到期
PrivateFunctionisXmlCacheExpired(file,seconds)
Dimfilelasttime
filelasttime=FSOGetFileLastModifiedTime(file)
IfDateAdd("s",seconds,filelasttime)<NowThen
isXmlCacheExpired=True
Else
isXmlCacheExpired=False
EndIf
EndFunction

Rem失掉文件的最初修正工夫
PrivateFunctionFSOGetFileLastModifiedTime(file)
Dimfso,f,s
Setfso=CreateObject("Scripting.FileSystemObject")
Setf=fso.GetFile(file)
FSOGetFileLastModifiedTime=f.DateLastModified
Setf=Nothing
Setfso=Nothing
EndFunction

Rem文件是不是存在
PublicFunctionFSOExistsFile(file)
Dimfso
Setfso=Server.CreateObject("Scripting.FileSystemObject")
Iffso.FileExists(file)Then
FSOExistsFile=true
Else
FSOExistsFile=false
EndIf
Setfso=nothing
EndFunction

Remxml本义字符
PrivateFunctionXMLStringEnCode(str)
Ifstr&""=""ThenXMLStringEnCode="":ExitFunction
str=Replace(str,"<","<")
str=Replace(str,">",">")
str=Replace(str,"’","")
str=Replace(str,"""",""")
str=Replace(str,"&","&")
XMLStringEnCode=str
EndFunction

Rem创立文件夹
PrivatefunctionCreateDIR(byvalLocalPath)
OnErrorResumeNext
Dimi,FileObject,patharr,path_level,pathtmp,cpath
LocalPath=Replace(LocalPath,"","/")
SetFileObject=server.createobject("Scripting.FileSystemObject")
patharr=Split(LocalPath,"/")
path_level=UBound(patharr)
Fori=0Topath_level
Ifi=0Then
pathtmp=patharr(0)&"/"
Else
pathtmp=pathtmp&patharr(i)&"/"
EndIf
cpath=left(pathtmp,len(pathtmp)-1)
IfNotFileObject.FolderExists(cpath)Then
’Response.writecpath
FileObject.CreateFoldercpath
EndIf
Next
SetFileObject=Nothing
Iferr.number0Then
CreateDIR=False
err.Clear
Else
CreateDIR=True
EndIf
EndFunction
EndClass
’设置缓存
FunctionSetCache(xmlFilePath,CacheTime,Conn,Sql)
setcache=newXmlCacheCls
Setcache.Conn=Conn
cache.XmlFile=xmlFilePath
cache.Sql=Sql
cache.CacheTime=CacheTime
cache.WriteDataToXml
Setcache=Nothing
EndFunction
’读取缓存
FunctionReadCache(xmlFilePath,Conn,Sql,ByRefReadOn)
setcache=newXmlCacheCls
Setcache.Conn=conn
cache.XmlFile=xmlFilePath
cache.Sql=Sql
cache.ReadData
ReadCache=cache.SQLArr
ReadOn=cache.ReadOn
Setcache=Nothing
EndFunction
%>


利用办法:

1、读取数据
以下是援用片断:
代码:
<!--#includefile="include/xmlcachecls.asp"-->
strSel=""
ReadOn=0
rsArray=ReadCache(Server.Mappath("xmlcache/index/*********.xml"),Conn,strSel,ReadOn)
’response.Write("######"&ReadOn&"######<br>")测试数据从那里读取的利用时正文失落
IfIsArray(rsArray)then
fori=0toubound(rsarray,2)
*********
next
EndIf
strSel=""
rsarray=""


2、缓存数据
cache.asp以下是援用片断:
代码:
<!--#includefile="../conn.asp"-->
<!--#includefile="../include/xmlcachecls.asp"-->
Sql=""
callSetCache(Server.Mappath("../xmlcache/index/**********.xml"),60*10,Conn,Sql)’60*10暗示缓存的工夫
3、挪用

在页面底部到场,如许就不会影响页面翻开的速率
以下是援用片断:
代码:
<scripttype="text/javascript"src="cache.asp"></script>


缓存工夫,单元秒默许10分钟;也能够本人设定cache.CacheTime=60*3030分钟
SQLServer是基于服务器端的中型的数据库,可以适合大容量数据的应用,在功能上管理上也要比Access要强得多。在处理海量数据的效率,后台开发的灵活性,可扩展性等方面强大。
精灵巫婆 该用户已被删除
沙发
发表于 2015-1-18 20:49:33 | 只看该作者
你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。
再见西城 该用户已被删除
板凳
发表于 2015-1-25 10:40:42 | 只看该作者
Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-2 21:48:58 | 只看该作者
哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?
若相依 该用户已被删除
5#
发表于 2015-2-8 07:39:32 | 只看该作者
还有如何才能在最短的时间内学完?我每天可以有效学习2小时,双休日4小时。
变相怪杰 该用户已被删除
6#
发表于 2015-2-25 01:12:35 | 只看该作者
跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组
柔情似水 该用户已被删除
7#
发表于 2015-3-7 15:05:33 | 只看该作者
如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:
乐观 该用户已被删除
8#
发表于 2015-3-15 08:04:07 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码,能产生和执行动态、交互式、高效率的站占服务器的应用程序。
灵魂腐蚀 该用户已被删除
9#
发表于 2015-3-21 23:35:12 | 只看该作者
兴趣爱好,那么你无须学编程,申请一个域名和空间,在网上下载一些免费开源的CMS系统,你不用改代码,只须熟悉它们的后台操作,像office一样简单方便,很快就能建一个站点,很多站长都是这样做的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 10:38

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表