较新版本的ColdFusion(我相信CF 8和9)允许您使用类似于JSON的对象文字表示法创建结构.
我的问题是,对于基本上是静态的数据,使用对象文字符号而不是单独分配是否有特定的好处(执行效率可能)?
例如:
通过个人作业,您可以执行以下操作:
var user = {};
user.Fname = "MyFirstnam";
user.Lname = "MyLastName";
user.titles = [];
ArrayAppend(user.titles,'Mr');
ArrayAppend(user.titles,'Dr.');
Run Code Online (Sandbox Code Playgroud)
对于对象文字,你会做类似的事情.
var user = {Fname = "MyFirstnam",
Lname = "MyLastName",
titles = ['Mr','Dr']};
Run Code Online (Sandbox Code Playgroud)
现在这个有限的例子很简单,但如果title是一个结构数组(Say一个地址数组),那么文字符号就变得很难处理了.
在我尝试任何事情之前,我立即认为文字会更快,因为您在运行时创建所需的所有内容,并且不需要浪费时间创建变量,然后调用函数进行附加等等。
然后我编写了一个小测试,生成一个包含结果的图表。你让我很好奇:-)
但请记住,虽然人们会跳跃并使用字面符号,但我认为重要的是要记住字面符号可能会很尴尬,并且大多数时候会更加混乱。
显然,如果您正在开发一个确实需要速度提升的页面,那么文字符号就是您所寻找的,但请注意,有时在 CF8 上,它会产生一些奇怪的行为。
只是为了向您展示我运行的测试类型:
<cfset aLiterals = arrayNew(1) />
<cfset aDirect = arrayNew(1) />
<cfsilent>
<cfloop from="1" to="10000" index="mm">
<!--- LITERAL --->
<!--- start timer --->
<cfset start = getTickcount() />
<cfloop from="1" to="1000" index="ii">
<cfset user = {Fname = "MyFirstnam", Lname = "MyLastName", titles = ['Mr','Dr']} />
</cfloop>
<!--- end timer --->
<cfset end = getTickCount()>
<!--- Display total time --->
<cfset total = end-start>
<cfset arrayAppend(aLiterals,total) />
<!--- DIRECT --->
<!--- start timer --->
<cfset start1 = getTickcount() />
<cfloop from="1" to="1000" index="jj">
<cfset user = {} />
<cfset user.Fname = "MyFirstnam" />
<cfset user.Lname = "MyLastName" />
<cfset user.titles = [] />
<cfset ArrayAppend(user.titles,'Mr') />
<cfset ArrayAppend(user.titles,'Dr.') />
</cfloop>
<!--- end timer --->
<cfset end1 = getTickCount()>
<!--- Display total time --->
<cfset total1 = end1-start1>
<cfset arrayAppend(aDirect,total1) />
</cfloop>
</cfsilent>
<!--- The cfchart --->
<cfchart format="png" xaxistitle="function" yaxistitle="Loading Time (in secs.)">
<cfchartseries type="bar" serieslabel="literal">
<cfchartdata item="literal" value="#arrayAvg(aLiterals)#">
</cfchartseries>
<cfchartseries type="bar" serieslabel="direct">
<cfchartdata item="direct" value="#arrayAvg(aDirect)#">
</cfchartseries>
</cfchart>
Run Code Online (Sandbox Code Playgroud)
希望这对您有帮助。