gpt4 book ai didi

coldfusion - 在 CF2016 中,变量和 This 是否被视为 CFC 内的隐式范围?

转载 作者:行者123 更新时间:2023-12-03 21:27:38 25 4
gpt4 key购买 nike

要利用 ColdFusion 2016's new setting searchImplicitScopes="false" 带来的性能提升,需要做什么? :

... bypasses searching for a variable in the implicit scopes thus finding the variables defined in the application faster.

我们是否应该在 ColdFusion 2016 中使用 searchImplicitScopes="false" 开始限定 VariablesThis 范围?

我找不到任何关于 CF2016 中隐式作用域的文档。我很确定 localarguments 作用域在函数内部没问题,但是像 variablesthis 在 CFC 中?

最佳答案

范围所有的东西!!!

CFC 中的variables 作用域对于CFC 中的所有函数都是全局的。

CFC 中的 this 作用域对于 CFC 中的所有函数都是全局的,也可以从 CFC 的调用者中引用。

如果您没有在 CFC 中定义变量的范围,则它默认为 variables 范围。

<--- this_test.cfc --->
<cfcomponent>
<cfset variables.foo = "This is my CFC global variable." />
<cfset this.bar = "This variable is global to my CFC and can be referenced externally." />
<cfset narf = "Global variable! Point!" />
<cffunction name="getNarf" access="public">
<cfreturn narf />
</cffunction>
</cfcomponent>

测试调用:

<cfset test = new this_test() /><p></p>

<p><cfoutput>
<li>#test.foo#</li>
<li>#test.bar#</li>
<li>#test.narf#</li>
<li>#test.getNarf()#</li>
</cfoutput></p>

  1. foovariables 范围内,你会得到一个错误:Element FOO is undefined in TEST.
  2. bar 位于 this 范围内,因此您可以获得 test.bar 的输出。
  3. narfvariables 范围内,你会得到一个错误:Element NARF is undefined in TEST.
  4. 获取 narf 值的唯一方法是让函数返回它。

更新

searchImplicitScopes 可以关闭 CF 的范围搜索功能。因此,如果您不指定范围,它就不会查找范围的层次结构。问题是,默认情况下,未限定范围的变量最终会出现在 variables 范围内吗?我会说,是的,因为这是自 CFC 首次亮相以来的默认设置。

不管使用那个设置,我仍然说范围一切。他们创建隐式 local 范围的全部原因是因为:

  1. 开发人员不习惯 var 作用域函数局部变量
  2. 以前的开发人员倾向于使用 var local = structNew(),因此他们只需 var 确定一个变量的范围。
  3. 2 还赋予了他们返回函数局部变量集合的能力。
  4. 从 CF 9 开始,当 var a = 0local.a = 0 相同时,您可以删除 var local = structNew 的所有实例(),只要您还“确定范围”并将这些私有(private)变量引用为 local.a

底线

如果 CF 必须在每个请求上查找变量范围,就会有一些性能开销。如果您使用 searchImplicitScopes=false 关闭该查找,您应该会获得一些性能提升。但是,这实际上应该取决于您的应用程序和平均请求负载。

关于coldfusion - 在 CF2016 中,变量和 This 是否被视为 CFC 内的隐式范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35804138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com