在cfscript中编写的代码执行速度比基于等效标记的代码快吗?

Dee*_*dhy 4 coldfusion cfml

今天,当我尝试增强应用程序的性能时,根据一些ColdFusion开发人员的建议,我将一些基于标记的代码修改为基于cfscript的代码.

但我没有看到任何性能提升.它实际上似乎有点慢.

Ada*_*ron 8

以前 - 我认为 - CFMX7大多数CFScript结构比基于标签的等价物更快.有时候会有很大的不同.从那时起,它确实没有任何内容,实际上CFScript代码有时会比标签中最接近的等效代码慢.例如:

for (i=1; i <= myObj.methodReturningTotal(); i++){
    // stuff here
}
Run Code Online (Sandbox Code Playgroud)

VS:

<cfloop index="i" from="1" to="#myObj.methodReturningTotal()#">
   <!--- stuff here --->
</cfloop>
Run Code Online (Sandbox Code Playgroud)

这些表面看起来相同,但基于标记的myObj.methodReturningTotal()表达式将快速执行,因为表达式在for循环的每次迭代时都会被评估,但在循环开始之前只有一次<cfloop>.

类似地,使用列表和查询的循环<cfloop>比使用for/ listLen()/ listGetAt()列表和类似的shenanigans的查询组合要快一些.

真的......使用不同的代码构造不会是一个提高性能的好地方.最好看的地方是查看您的逻辑,看看是否可以改进,并且 - 更有可能看到收益 - 看看您的数据库交互如何执行.改进SQL,查看索引是否正确等等,可以获得更多收益,因为DB交互通常是最大的性能瓶颈.

对你有好处,顺便说一句,对于你的CF开发人员所说的内容持怀疑态度并提出质疑,而没有提供任何实际证据.这是处理这些事情和一般生活的好方法.