预处理(经典)ASP页面

时间:2012-07-04 16:09:22

标签: sql-server-2008 asp-classic

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

我是如何实现这一目标的?

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

1 个答案:

答案 0 :(得分: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时,缓存文件可能会被命名为{{ 1}}。如果您有5个不同的查询,则可以将其缓存为cache-1234-blue.xmlquery1-1234-blue.xml等。

你不需要“每晚”这样做。您可以在代码中包含缓存生命周期,并且代替“if cache file exists”测试,使用“如果缓存文件存在且是新鲜的”。为此,只需获取缓存文件上的最后修改时间戳,并查看它是否早于缓存生存期。

query2-1234-blue.xml

这可能是10分钟,10小时,10个请求,无论你喜欢什么。

我在上面说过,XML是缓存文件中数据格式的一个很好的选择。 ADO有一个SaveAsXML方法,您也可以使用查询附加的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 子句直接从SQL2008生成XML。


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