2010-06-18 42 views
1

在經典的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://stackoverflow.com/questions/1255980/implement-object-caching-in-classic-asp-memory-leaking – Castrohenge 2010-07-17 19:07:51

回答

0

無法在會話或應用程序(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