Coldfusion 是变量&;这是否考虑了CF2016中CFC内的隐式作用域?
如何利用以下方面的性能优势: 。。。绕过在隐式范围中搜索变量,因此 更快地查找应用程序中定义的变量 我们是否应该在ColdFusion 2016中开始对Coldfusion 是变量&;这是否考虑了CF2016中CFC内的隐式作用域?,coldfusion,scope,cfml,coldfusion-2016,Coldfusion,Scope,Cfml,Coldfusion 2016,如何利用以下方面的性能优势: 。。。绕过在隐式范围中搜索变量,因此 更快地查找应用程序中定义的变量 我们是否应该在ColdFusion 2016中开始对变量和进行范围界定,该使用searchImplicitScopes=“false”在CFC内进行范围界定 我找不到任何关于CF2016中被视为隐式作用域的文档。我很确定局部和参数作用域在函数中是很好的,但是像变量和这个这样的常用作用域在CFC中又如何呢?作用域所有的东西 CFC内的变量作用域对于CFC内的所有函数都是全局的 CFC内的此作用域对C
变量
和进行范围界定,该
使用searchImplicitScopes=“false”
在CFC内进行范围界定
我找不到任何关于CF2016中被视为隐式作用域的文档。我很确定
局部
和参数
作用域在函数中是很好的,但是像变量
和这个
这样的常用作用域在CFC中又如何呢?作用域所有的东西强>
CFC内的变量
作用域对于CFC内的所有函数都是全局的
CFC内的此
作用域对CFC内的所有函数都是全局的,也可以从CFC的调用方引用
如果不在CFC内定义变量的范围,则默认为变量
范围。
测试呼叫:
#test.foo#
#测试棒#
#test.narf#
#test.getNarf()#
foo
在variables
范围内,您将得到一个错误:元素foo在测试中未定义。
bar
在这个
范围内,因此您可以得到test.bar
的输出narf
在变量范围内,您将得到一个错误:元素narf在测试中未定义。
narf
值的唯一方法是让函数返回它searchImplicitScopes
可以关闭CF的范围搜索功能。因此,如果不确定某个范围,它将不会查找范围的层次结构。问题是,默认情况下,未设置范围的变量是否会在变量范围内结束?我会说,是的,因为这是自CFCs上市以来的默认情况
不管使用那个设置,我还是会说范围所有的事情。他们创建隐式local
范围的全部原因是:
开发人员不习惯var
scoping函数局部变量
开发人员倾向于使用var local=structNew()
,因此他们只需var
定义一个变量
2还使他们能够返回函数局部变量的集合
从CF 9开始,当var a=0
与local.a=0
相同时,您可以删除var local=structNew()
的所有实例,只要您还“确定”了这些私有变量的范围并将其引用为local.a
底线
如果CF必须在每个请求上查找变量作用域,则会产生一些性能开销。如果您使用searchImplicitScopes=false
关闭该查找,您应该会得到一些性能提升。但是,这实际上应该取决于您的应用程序和平均请求负载。刚刚安装了CF 2016 Express,我可以得出结论,使用searchImplicitScopes=“false”
,当变量没有作用域时,仍在搜索变量的作用域,但是不是这个范围。对不起,我没有看到你的答案是版本特定的。范围所有的东西?甚至本地
和参数
?抱歉,我只是重新表述了我的问题,以明确我的问题是,如何利用CF2016的searchImplicitScopes=false
。Scope Everything的性能优势。即使是local
和arguments
@AdrianJMoreno“我会说,是的”,你能确认一下吗?我还没有安装CF2016。当我明天发现答案时,我可能会发布我的答案。
<--- 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() />
<cfoutput>
<li>#test.foo#</li>
<li>#test.bar#</li>
<li>#test.narf#</li>
<li>#test.getNarf()#</li>
</cfoutput>