我在coldfusion中尝试Application.cfc。我想知道application.cfc在内存中是否是静态的,即它是为第一个用户创建的,并且在每个访问它的用户之后访问相同的application.cfc(在内存中)。
实施例。 UserOne访问网页> Application.cfc在内存块1中创建。 UserTwo访问网页>再次调用内存块1上的Application.cfc,但调用函数onRequestStart。
我是否正确地说application.cfc在内存中是静态的(或直到它过期)或是否为每个用户重新创建?如果是这会是一个巨大的记忆问题吗?
有人可以解释谢谢。
答案 0 :(得分:6)
针对每个请求执行Application.cfc,但根据情况仅运行部分请求。伪构造函数(您设置this.name类型设置的位置)每次都会执行,并且无法进行有问题的更改。 onApplicationStart()仅在应用程序不存在时运行。应用程序作用域变量可供每个会话访问,并且每个应用程序实例(不是会话实例)仅存在一次。 onSessionStart()仅在新访问者第一次访问该站点时运行。还有其他事件特定功能
这是另一个可能对您的问题有所帮助的主题。
以及adobe docs:
http://help.adobe.com/en_US/ColdFusion/10.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-74fa.html
活跃的用户计数器就像伪代码
一样简单onApplicationStart {application.activeUsers = 0}
onSessionStart {application.activeUsers++}
onSessionEnd {application.activeUsers--}
消除一些困惑
'this'范围用于设置应用程序设置,例如name,sessionTimeOut或customTagPaths。这些设置内置于ColdFusion中。
<cfscript>
this.customtagpaths = expandPath('./customtags');
this.name = "myCoolWebsite";
this.sessionmanagement = "Yes" ;
this.sessionTimeOut = CreateTimeSpan(0,0,20,0);
</cfscript>
虽然'this'范围与应用程序相关,但您无法使用它来设置持久应用程序范围变量。应用程序变量是使用'application。'语法设置的,通常最初在onApplicationStart()函数中设置。
<cfset application.myVariable = "I am the same value for every user">
答案 1 :(得分:0)
您的假设是正确的
应用程序事件是生命周期中的特定事件 一个应用程序。每次发生其中一个事件时,ColdFusion都会运行 Application.cfc文件中的相应方法(也称为 作为申请CFC)。 Application.cfc文件定义 应用程序设置和实现处理应用程序的方法 事件
应用程序变量可用于所有页面 应用程序,即具有相同应用程序名称的页面。 因为应用程序变量是持久的,所以您很容易通过 页面之间的值。
另外值得注意的是
cflock标记控制对ColdFusion代码的同时访问。该 cflock标签可让您执行以下操作:
- 保护访问和操作共享数据的代码段 会话,应用程序和服务器范围,以及请求和 使用ColdFusion线程的应用程序的变量范围。
...