0

我正在运行一个带有 SQL2008 数据库的经典 vbscript ASP 站点。有一些页面需要大量处理器,但实际上并不经常更改。理想情况下,我希望服务器每晚处理一次这些,也许是 HTML 页面,然后可以离开服务器,而不必为每个用户处理。

有什么想法可以实现吗?

应用程序本身运行良好,所以我不热衷于用另一种脚本语言重写整个东西,即使经典的 asp 有点过头了!!

4

1 回答 1

1

是的 :

您没有指定页面的哪些部分是“处理器繁重的”,但我会假设它是 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.xmlquery2-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 文件。

于 2012-07-04T16:35:33.750 回答