经典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:[进一步说明]在上面的代码中,“沉重的东西”并不是很重,但我只是想知道是否有办法避免它一直执行。它读取数据库元信息,建立数据库中主键的表格,以及将字符串解析为类的另一个表格等。
无法在会话或应用程序(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 < /脚本>
希望帮助对不起我粘贴正确格式的代码无能...
对不起,我在使用ASP解放之后发布它之后,我忘记了这一点。我不想回去测试你的解决方案。顺便说一句,我的代码是在JScript中,所以我不知道你用什么“现有的VBScript代码”:) – 2011-05-16 21:10:00
这可以帮助http://*.com/questions/1255980/implement-object-caching-in-classic-asp-memory-leaking – Castrohenge 2010-07-17 19:07:51