2012-10-30 71 views
1

我正在使用Coldfusion中的Application.cfc進行試驗。我想知道application.cfc是否在內存中是靜態的,即它爲第一個用戶創建一次,並且在每個訪問它的用戶訪問同一個application.cfc(在內存中)之後。內存中的application.cfc是靜態的嗎?

例子。 UserOne訪問網頁> Application.cfc在內存塊1創建。 UserTwo訪問網頁>內存塊1上的Application.cfc被再次調用,但onRequestStart函數被調用。

我正確地說,application.cfc在內存中是靜態的(或直到它過期),還是爲每個用戶重新創建?如果這是一個巨大的記憶問題,會不會?

有人可以解釋謝謝。

回答

6

的Application.cfc是爲每個請求執行的,但它只是部分視情況而定運行。僞構造函數(您設置this.name類型設置的位置)每次都會執行,並且無法更改。 onApplicationStart()僅在應用程序不存在時運行。每個會話都可以訪問應用程序範圍的變量,並且每個應用程序實例(不是會話實例)只存在一次。 onSessionStart()僅在新訪問者首次訪問該站點時運行。還有其他的事件特定功能

這是另一個線程,可能會幫助你的問題。

ColdFusion Application.cfc - order of execution

除了土磚文檔:

http://help.adobe.com/en_US/ColdFusion/10.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-74fa.html

一個活動的用戶計數器是如像僞代碼一樣簡單:

onApplicationStart {application.activeUsers = 0} 
onSessionStart {application.activeUsers++} 
onSessionEnd {application.activeUsers--} 

消解一些混亂

'這個'範圍用於設置應用程序設置,如名稱,sessionTimeOut,或customTagPaths。這些設置內置於ColdFusion中。

<cfscript> 
    this.customtagpaths = expandPath('./customtags'); 
    this.name = "myCoolWebsite"; 
    this.sessionmanagement = "Yes" ; 
    this.sessionTimeOut = CreateTimeSpan(0,0,20,0); 
</cfscript> 

雖然「這個」範圍是關係到應用程序,你不能用它來設置永久應用範圍的變量。應用程序變量通過使用'應用程序設置。'語法,通常最初在onApplicationStart()函數中設置。

<cfset application.myVariable = "I am the same value for every user"> 
+0

我試着創建一個應用程序變量,每次請求時遞增,每次刷新頁面或新用戶訪問頁面時都會重置。這意味着應用程序不是靜態的嗎? –

+0

確保您啓用會話管理。如果你這樣做了,我必須看到代碼來回答你的應用程序變量被重置的原因。 – Travis

+0

啓用會話管理:如果您使用的是cfscript,請使用this.sessionmanagement = true;如果您正在使用的標籤都位於您的application.cfc文件的頂部,而該標籤緊跟在您的標籤後面。 – Travis

0

你的假設是正確的

應用事件的 應用程序生命週期過程中的具體事件。每次發生這些事件之一時,ColdFusion都會在您的Application.cfc文件中運行 對應的方法(也稱爲 以作爲應用程序CFC)。 Application.cfc文件定義了 應用程序設置並實現了處理應用程序 事件的方法。

Source

Application變量可到 應用程序中的所有頁面,也就是具有相同的應用程序名稱的頁面。 由於應用程序變量是持久的,因此您可以輕鬆地在頁面之間傳遞 值。

Source

另外值得注意

的CFLOCK標籤控制以ColdFusion代碼同時訪問。該 CFLOCK標籤可以讓你做到以下幾點:代碼訪問,並在 會話,應用程序和服務器範圍操縱共享數據,並在請求和 變量的範圍爲使用ColdFusion應用程序

  • 保護節線程。

...

Source

+0

那麼,我將如何創建一個變量,以改變頁面內的所有用戶?說一個命中計數器。 –

+0

如果因爲CF關閉或重新啓動服務器而永遠不想丟失命中計數器,則可以將其存儲在數據庫中。如果你不介意時不時丟失命中計數器,那麼'應用程序'範圍將是適當的。 –