在经典ASP(我被迫使用)中,我有一些工厂功能,即功能 返回课程。我使用JScript。
在一个包含文件中,我使用这些工厂函数来创建一些在整个应用程序中使用的类。这个包含文件包含在所有页面中的#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,我如何实现相同的效果? 我知道
那么,我还能做些什么吗?也许某种方法来实现这些类的缓存,这些类实际上是JScript中的对象。
PS:[进一步澄清]在上面的代码中“重物”并不那么重,但我只是想知道是否有办法避免它一直被执行。它读取数据库元信息,构建数据库中主键的表,以及将字符串解析为类的另一个表等。答案 0 :(得分:0)
无法在会话或应用程序中存储asp类的对象(在VBScript中)。
这是因为ASP Classic中的对象不可序列化。好不能自动序列化。你可以自己做......但这当然意味着一些额外的工作。
如上所述,无法在会话或应用程序中存储用vbscript编写的类。
你可以在会话或应用程序中存储用jscript编写的类。所以你要做的就是在jscript中编写你的类,将它们存储在会话中。
然后使用您(现有的)vbscript代码中的thos类。
示例:
&lt; script runat =“server”language =“jscript”&gt; function MyClass(){ this.Var1 =“54321”; this.Var2 = Var2; } var Var1,Var2;
function MyClassFactory(){ 返回新的MyClass(); } &LT; /脚本&GT; &lt; script runat =“server”language =“vbscript”&gt;
dim instance:set instance = MyClassFactory() instance.Var1 =“12345”
设置会话(“sesInstance”)=实例
response.write session(“sesInstance”)。Var1 &LT; /脚本&GT;
希望这有助于我无法正确粘贴正确格式化的代码...