2012-07-04 117 views
0

我正在运行一个经典的vbscript ASP站点和SQL2008数据库。有几页处理器很重,但实际上并没有经常改变。理想情况下,我希望服务器每晚处理一次这些数据(可能放入HTML页面),然后再从服务器上飞走,而不必为每个用户处理。前处理(经典)ASP页面

任何想法,我可以做到这一点?

该应用程序本身工作得很好,所以我不想用另一种脚本语言重写整个事情,即使经典的asp有点过山!

+0

这听起来有点像一些我从其他网站获取数据的页面。我对它们进行了修改,以便在表格中保存数据的缓存副本以及指示何时获取数据的日期/时间。缓存满足大部分请求,但是如果数据已经过时,则更新缓存。您可以使用SQL Server中的计划作业来更新缓存的数据。如果问题全部在ASP VBscript方面,请查看<您最喜爱的搜索引擎>:缓存经典ASP页面 – HABO

回答

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的查询参数,那么当p1p2分别具有值1234blue时,缓存文件可能被命名为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个请求,无论你喜欢什么。

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


如果“处理器重”的部分不是查询和检索,但在html页面的生成,那么你可以申请相同的排序方式,而只是直接缓存HTML文件。

+0

非常感谢这个Cheeso!在解决这个问题的时候,我有一些页面的查询量很大,以及一些HTML代码更多,所以你的优秀答案涵盖了两个方面。 –