最后,提醒,通过web访问,asp编程环境下,很多人采用xmlHTTP组件访问,这会造成很多问题。xmlhttp自身会cache请求的资源,导致我们通过此组件请求得到的内容不是最新的,造成逻辑上的混乱。所以,应当选择xml Server http对象或者winhttp组件来实现web请求资源。 使用ASP中的缓存技术可以很大程度上提高你的网站性能,其实这些实现方法是非常的简单,它将说明如何在服务器上的缓存是如何工作以及你如何使用一种被称为断开连接的ADO连接技术。
下面再讨论一种客户端的缓存技术这种技术也叫断开连接的ADO连接技术(翻译水平太次,听上去怎么这么别扭)。这种技术主要使用在用来保存用户个人信息,例如用户的密码,代号等等上面。它主要使用了ADO的一些属性。同时也回答了一些网友曾经提到过的能否在Applocation中使用ADO对象的问题。解释不清楚,下面让代码来发言: 文件GLOBAL.ASA: < !--METADATA TYPE="TypeLib" FILE="C:/Program Files/Common Files/system/ado/msado15.dll"-- > < SCRIPT LANGUAGE=VBScript RUNAT="Server" > Sub Application_OnStart SQL = "Select UserName, Password FROM UserInfo" cnnUsers = "DSN=User" Set rsUsers = Server.CreateObject("ADODB.Recordset") '注意下面这两句话,就是用来实现那个叫可用的断开连接的ADO技术 rsCustomers.CursorLocation = adUseClient rsCustomers.Open SQL, cnnAdvWorks, adOpenStatic, AdLockReadOnly ' 断开RecordSet的和数据库的连接 rsCustomers.ActiveConnection = Nothing Set Application("rsCustomers") = rsCustomers End Sub 文件Users.ASP < % 'Clone方法使得每个用户拥有自己的一个RecordSet集合 Set yourUsers = Application("rsUsers").Clone Set UserName = yourUsers("UserName") Set Password = yourUsers("Password") Do Until yourUsers.EOF % > 用户姓名:< %= UserName % > 用户密码:< %= Password % > < % yourUsers.MoveNext Loop % > 至于缓存的作用,我想我也不用再多说了,它的作用已经很明显,特别是对于信息量非常大或是全数据库页面的网站,他能很好地利用主机的内存资源,加速ASP的执行效率,减轻服务器的负担,而动网在这一方面做得是最突出的,像他现在的dvbbs7.1.0版,更是在缓存的利用上更上一层楼,前后台大多的操作都和缓存有关,而现在动网里用的也就是迷城浪子的缓存类: <% Class Cls_Cache '==================使用说明==================== '本类模块是动网先锋原创,作者:迷城浪子。如采用本类模块,请不要去掉这个说明。这段注释不会影响执行的速度。 '作用:缓存和缓存管理类 '公有变量:Reloadtime 过期时间(单位为分钟)缺省值为14400 'MaxCount 缓存对象的最大值,超过则自动删除使用次数少的对象。缺省值为300 'CacheName 缓存组的总名称,缺省值为"Dvbbs",如果一个站点中有超过一个缓存组,则需要外部改变这个值。 '属性:Name 定义缓存对象名称,只写属性。 '属性:value 读取和写入缓存数据。 '函数:ObjIsEmpty()判断当前缓存是否过期。 '方法:DelCahe(MyCaheName)手工删除一个缓存对象,参数是缓存对象的名称。 '======================== Public Reloadtime,MaxCount,CacheName Private LocalCacheName,CacheData,DelCount
Private Sub Class_Initialize() Reloadtime=14400 '过期时间(单位为分钟) CacheName="Dvbbs" '缓存组的总名称 End Sub
Private Sub SetCache(SetName,NewValue) Application.Lock Application(SetName) = NewValue Application.unLock End Sub
Public Property Let Name(ByVal vNewValue) '缓存对象名称 LocalCacheName=LCase(vNewValue) End Property
Public Property Let Value(ByVal vNewValue) '读取和写入缓存数据 If LocalCacheName<>"" Then CacheData=Application(CacheName&"_"&LocalCacheName) If IsArray(CacheData) Then CacheData(0)=vNewValue CacheData(1)=Now() Else ReDim CacheData(2) CacheData(0)=vNewValue CacheData(1)=Now() End If SetCache CacheName&"_"&LocalCacheName,CacheData Else Err.Raise vbObjectError + 1, "DvbbsCacheServer", " please change the CacheName." End If End Property
Public Property Get Value() If LocalCacheName<>"" Then CacheData=Application(CacheName&"_"&LocalCacheName) If IsArray(CacheData) Then Value=CacheData(0) Else Err.Raise vbObjectError + 1, "DvbbsCacheServer", " The CacheData Is Empty." End If Else Err.Raise vbObjectError + 1, "DvbbsCacheServer", " please change the CacheName." Webjx.Com End If End Property
Public Function ObjIsEmpty() '判断当前缓存是否过期 ObjIsEmpty=True CacheData=Application(CacheName&"_"&LocalCacheName) If Not IsArray(CacheData) Then Exit Function If Not IsDate(CacheData(1)) Then Exit Function If DateDiff("s",CDate(CacheData(1)),Now()) < 60*Reloadtime Then ObjIsEmpty=False End Function
Private Sub makeEmpty(SetName) '释放内存 Application.Lock Application(SetName) = Empty Application.unLock End Sub
Public Sub DelCahe(MyCaheName) '删除缓存 makeEmpty(CacheName&"_"&MyCaheName) End Sub End Class