经典ASP应用范围的初始化和对象缓存

问题描述:

在经典的ASP(我不得不使用)中,我有几个工厂函数,即返回类的函数 。我使用JScript。经典ASP应用范围的初始化和对象缓存

在一个包含文件中,我使用这些工厂函数来创建一些在整个应用程序中使用的类。包含文件包含在所有页面的#include指令中。

这些工厂函数做了一些“繁重工作”,我不希望它们在每个页面加载时执行。

因此,要明确这一点我有这样的事情:

// factory.inc 
function make_class(arg1, arg2) { 
    function klass() { 
     //... 
    } 

    // ... Some heavy stuff 

    return klass; 
} 

// init.inc, included everywhere 
<!-- #include FILE="factory.inc" --> 
// ... 
MyClass1 = make_class(myarg01, myarg02); 
MyClass2 = make_class(myarg11, myarg12); 
//... 

我怎样才能达到同样的效果,而不在每个页面加载调用make_class? 我知道

  • 我不能在Application对象缓存类
  • 我不能在Global.asa中使用Application_OnStart钩
  • 我大概可以创建一个脚本组件,但我真的不想那样做

那么,有什么我可以做的吗?也许有一些方法可以实现这些类的缓存,这些类实际上是JScript中的对象。

PS:[进一步说明]在上面的代码中,“沉重的东西”并不是很重,但我只是想知道是否有办法避免它一直执行。它读取数据库元信息,建立数据库中主键的表格,以及将字符串解析为类的另一个表格等。

+0

这可以帮助http://*.com/questions/1255980/implement-object-caching-in-classic-asp-memory-leaking – Castrohenge 2010-07-17 19:07:51

无法在会话或应用程序(VBScript中)中存储asp类的对象。

这是因为ASP Classic中的对象不可序列化。以及不能自动序列化。你可以自己做......但这意味着一些额外的工作。

正如我上面所说的,它不可能在会话或应用程序中存储以vbscript编写的类。

您可以在会话或应用程序中存储用jscript编写的类。所以你需要做的就是用jscript编写你的类,并将它们存储在会话中。

然后从你的(现有的)vbscript代码中使用thos类。

例如:

<脚本RUNAT = “服务器” 语言= “JScript的” > 功能MyClass的(){ this.Var1 = “54321”; 这个。Var2 = Var2; } var Var1,Var2;

函数MyClassFactory(){ return new MyClass(); } < /脚本> <脚本RUNAT = “服务器” LANGUAGE = “VBSCRIPT” >

暗淡例如:设置实例= MyClassFactory() instance.Var1 = “12345”

组会议(” sesInstance “)=实例

回复于会议(” sesInstance“)。VAR1 < /脚本>

希望帮助对不起我粘贴正确格式的代码无能...

+0

对不起,我在使用ASP解放之后发布它之后,我忘记了这一点。我不想回去测试你的解决方案。顺便说一句,我的代码是在JScript中,所以我不知道你用什么“现有的VBScript代码”:) – 2011-05-16 21:10:00