Sql server 2008 预处理(经典)ASP页面

Sql server 2008 预处理(经典)ASP页面,sql-server-2008,asp-classic,Sql Server 2008,Asp Classic,我正在运行一个带有SQL2008数据库的经典vbscript ASP站点。有一些页面需要大量处理器,但实际上并不经常更改。理想情况下,我希望服务器每晚处理一次这些内容,可能会将其转换为HTML页面,然后这些页面可以从服务器上飞出,而不必为每个用户进行处理 你知道我该怎么做吗 应用程序本身工作得很好,所以我不想用另一种脚本语言重写整个过程,即使经典的asp有点过火 是: 您没有指定页面的哪些部分是“处理器密集型”的,但我假设这是SQL数据的查询和处理。一个想法是检索数据并将其作为缓存文件存储在文件

我正在运行一个带有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. 
…修改后的代码可以如下所示:

 (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

你不必“每晚”这样做。您可以在代码中包含缓存生存期,并使用“if cache file exists and is fresh”代替“if cache file exists”测试。要做到这一点,只需获取缓存文件上最后修改的时间戳,并查看它是否早于缓存生存期

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个请求,随便你喜欢

我在上面说过,XML是缓存文件中数据格式的良好选择。ADO有一个SaveAsXML方法,您还可以使用附加到查询的
FOR XML
子句直接从SQL2008生成XML



如果“处理器繁重”的部分不是查询和检索,而是html页面的生成,那么您可以应用相同的方法,只是直接缓存html文件

这听起来有点像我从其他网站收集数据的一些页面。我修改了它们,将数据的缓存副本保存在一个表中,并附带一个日期/时间,指示数据的获取时间。大多数请求都由缓存满足,但如果数据已过期,则我会更新缓存。您可以使用SQL Server中的计划作业来更新缓存的数据。如果问题都出在ASP VBscript方面,请看一看for:caching classic ASP页面。非常感谢您的帮助!结果是,我有一些页面是查询量很大的,还有一些页面是关于HTML生成的,所以您的优秀答案涵盖了这两个方面。