|
应将数据缓存在哪里,有哪些缓存策略?通常,数据缓存在 Web 服务器的内存或磁盘中。下两个技巧讲述了这两个方法。
技巧 2: 将经常使用的数据缓存在 Application 或 Session 对象中 ASP Application 和 Session 对象为将数据缓存在内存中提供了方便的容器。您可以将数据指派到 Application 和 Session 对象中,这些数据在 HTTP 调用之间保留在内存中。Session 数据是按每个用户分别存储的,而 Application 数据则在所有用户之间共享。
什么时候将数据装载到 Application 或 Session 中呢?通常,数据是在启动 Application 或 Session 时装载。要在 Application 或 Session 启动过程中装载数据,应将适当的代码分别添加到 Application_OnStart() 或 Session_OnStart() 中。这些函数应在 Global.asa 中,假如没有,则可以添加这些函数。还可以在第一次需要时装载该数据。为此,在 ASP 页中添加一些代码(或编写一个可重复使用的脚本函数),以检查数据是否存在,假如不存在,就装载数据。这是一个传统的性能技术,称为“惰性计算” - 在您知道需要某一个值以前不计算该值。例如:
<% Function GetEmploymentStatusList Dim d d = Application(“EmploymentStatusList”) If d = ““ Then ' FetchEmploymentStatusList function (not shown) ' fetches data from DB, returns an Array d = FetchEmploymentStatusList() Application(“EmploymentStatusList”) = d End If GetEmploymentStatusList = d End Function %>
可以为所需要的每个数据块编写类似的函数。
应以什么格式存储数据?可以存储任何变体类型,因为所有脚本变量都是变体型。例如,您可以存储字符串、整数或数组。通常,您将以这些变量类型之一存储 ADO 记录集的内容。要从 ADO 记录集获取数据,您可以手工将数据复制到 VBScript 变量,一次一个字段。使用一个 ADO 记录集持久函数 GetRows()、GetString() 或 Save()(ADO 2.5),可加快速度且更轻易一些。其具体情况已超出本文所讨论的范围,但下面给出了一个函数举例,说明使用 GetRows() 返回记录集数据的一个数组:
' Get Recordset, return as an Array Function FetchEmploymentStatusList Dim rs Set rs = CreateObject(“ADODB.Recordset”) rs.Open “select StatusName, StatusID from EmployeeStatus”, _ “dsn=employees;uid=sa;pwd=;” FetchEmploymentStatusList = rs.GetRows() “ Return data as an Array rs.Close Set rs = Nothing End Function
对上面举例做更进一步改进,可以将 HTML 缓存为列表,而不是数组。下面是简单的示例:
' Get Recordset, return as HTML Option list Function FetchEmploymentStatusList Dim rs, fldName, s Set rs = CreateObject(“ADODB.Recordset”) rs.Open “select StatusName, StatusID from EmployeeStatus”, _ “dsn=employees;uid=sa;pwd=;” s = “<select name=““EmploymentStatus”“>“ & vbCrLf Set fldName = rs.Fields(“StatusName”) ' ADO Field Binding Do Until rs.EOF ' Next line violates Don't Do String Concats, ' but it's OK because we are building a cache s = s & “ <option>“ & fldName & “</option>“ & vbCrLf rs.MoveNext Loop s = s & “</select>“ & vbCrLf rs.Close Set rs = Nothing ' See Release Early FetchEmploymentStatusList = s ' Return data as a String End Function
|
| 共9页: 上一页 [1] 2 [3] [4] [5] [6] [7] [8] [9] 下一页 |
评论加载中…