use*_*202 1 coldfusion coldfusion-8
我一直在我的CF服务器上注意到我的应用程序开始变得非常慢.我将大部分内容归结为不缓存某些内容,而实际上它们应该被缓存.
我想验证此对象是否在应用程序范围内,而不是每次加载页面时都创建它.
<cfset application.components.blog = createObject('component','sharedcomponents.cfc.blog').init()>
Run Code Online (Sandbox Code Playgroud)
验证对象是否存在于应用程序范围内以及是否允许该对象的最佳方法是什么.此外,如果文件已更新,如何检测更改,以便整个应用程序刷新它?
任何建议都非常感谢.
你没有说那个代码在哪里或者它是如何/何时执行的,所以不可能自信地回答你的问题.
如果它在Application.cfc中的onApplicationStart()中,那么 - 是的 - 它只会在应用程序启动时执行.
但是,如果它仅在某个文件中,则每次调用该文件时都会重新执行该文件,除非您采取措施确保不调用该文件.EG:围绕它提出一个条件:
<cfif not (structKeyExists(application, "components") and structKeyExists(application.components, "blog"))>
<cfset application.components.blog = createObject('component','sharedcomponents.cfc.blog').init()>
</cfif>
Run Code Online (Sandbox Code Playgroud)
你似乎想知道是否有一些魔法发生在那,因为你的变量赋值在应用程序范围内设置了一些内容,如果重新执行文件,CF将自动知道不会重新运行它.不,CF就是按照它所说的做的:如果你告诉它运行那段代码,它就会运行.无论变量被分配到哪个范围.
您继续询问有关检测文件是否已更新并相应地重新启动整个应用程序的问题.这些文件是如何更新的?我认为它是主动部署过程的一部分(例如:你做了一些事情来部署它们).如果是这种情况,您是否最适合了解应用程序何时需要重新启动?首先,并非每次代码更改都能保证应用程序重新启动,因此您不会想要自动执行此操作,我认为?
applicationStop()如果需要重新启动应用程序,则应该有一个运行的脚本.有些人onRequestStart()检查了一个URL参数,然后调用applicationStop()它,如果它已经通过,但我个人认为这是错误的地方.对于几乎每一个条件都无关紧要的请求,所以没有必要检查每一个百万分之一的请求,它实际上是相关的.我更喜欢有一个单独的脚本来执行它,这被称为需要必须.