我正在运行一个带有 SQL2008 数据库的经典 vbscript ASP 站点。有一些页面需要大量处理器,但实际上并不经常更改。理想情况下,我希望服务器每晚处理一次这些,也许是 HTML 页面,然后可以离开服务器,而不必为每个用户处理。
有什么想法可以实现吗?
应用程序本身运行良好,所以我不热衷于用另一种脚本语言重写整个东西,即使经典的 asp 有点过头了!!
我正在运行一个带有 SQL2008 数据库的经典 vbscript ASP 站点。有一些页面需要大量处理器,但实际上并不经常更改。理想情况下,我希望服务器每晚处理一次这些,也许是 HTML 页面,然后可以离开服务器,而不必为每个用户处理。
有什么想法可以实现吗?
应用程序本身运行良好,所以我不热衷于用另一种脚本语言重写整个东西,即使经典的 asp 有点过头了!!
是的 :
您没有指定页面的哪些部分是“处理器繁重的”,但我会假设它是 SQL 数据的查询和处理。一种想法是检索数据并将其作为缓存文件存储在文件系统中。XML 是一种不错的数据格式选择。
而您的原始代码是这样的:
(psuedocode)
get results from database
process results to generate html file
...您修改后的代码如下所示:
check if cache file exists
if not exist
get results from database
store results in cache file
get results from cache file
process results to generate html file.
这是一种通用的缓存方法,可以应用于您有查询参数确定输出的情况。只需根据所有组成参数生成缓存文件的名称。因此,如果结果取决于名为 p1 和 p2 的查询参数,那么当p1
和分别p2
具有值1234
和时blue
,缓存文件可能被命名为 cache-1234-blue.xml
. 如果您有 5 个不同的查询,您可以将它们缓存为query1-1234-blue.xml
,query2-1234-blue.xml
依此类推。
您无需“每晚”执行此操作。您可以在代码中包含缓存生命周期,并使用“如果缓存文件存在并且是新鲜的”来代替“如果缓存文件存在”测试。为此,只需获取缓存文件上最后修改的时间戳,并查看它是否早于您的缓存生命周期。
Function FileOlderThan(fname, age)
'function returns True if the file is older than the age,
' specified in minutes.
Dim LastModified, FSO, DateDifference
Set FSO = CreateObject("Scripting.FileSystemObject")
LastModified = FSO.GetFile(fname).DateLastModified
DateDifference = DateDiff("n", LastModified, Now())
If DateDifference > age Then
FileAge = False
Else
FileAge = True
End If
End Function
fname = Server.MapPath(".") & cacheFileName
If FileOlderThan(fname, 10) Then
... retrieve fresh data ...
End If
这可能是 10 分钟、10 小时、10 个请求,无论你喜欢什么。
上面说过,对于cachefile中的数据格式,XML是一个不错的选择。ADO 有一个 SaveAsXML 方法,您还可以使用FOR XML
附加到查询的子句直接从 SQL2008 生成 XML。
如果“处理器重”部分不是查询和检索,而是生成 html 页面,那么您可以应用相同的方法,只是直接缓存 html 文件。