我们可以用等效的cfscript语句替换每个ColdFusion标记吗?

时间:2011-08-18 10:16:48

标签: scripting coldfusion coldfusion-9

我想知道我的cfml页面或cfc组件是否只有cfscript标签?

我们可以在任何地方使用它吗?它的用法有限制吗?

修改

我很好奇,因为我读了下面一行

  

除了变量设置外,其他操作往往略有不同   CFScript比标签更快。

阅读here

3 个答案:

答案 0 :(得分:9)

现在大多数标签都是作为CFScript就绪的实现实现的,但不是全部。与之前的海报所说的相反,CFMAIL是已经完成的工作之一:http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSe9cbe5cf462523a0693d5dae123bcd28f6d-7ff9.html

就其他脚本报道而言,它位于文档中: http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-7feb.html

注意,现在可以完全用脚本编写CFC: http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSE99A664D-44E3-44d1-92A0-5FDF8D82B55C.html

但是我会谨慎地这样做,因为并非所有标签都是在脚本中实现的,如果你突然发现你需要在你的脚本专用CFC中使用其中一个......你有点卡住了。 / p>

另外我认为像CFQUERY这样的构造比Query.cfc的方法更优雅。

对于CFScript比基于标记的代码更快的评论,自CFMX7.0中的编译器更改以来,情况并非如此。大多数情况下,代码现在编译成几乎相同的东西。有些操作在CFScript中更快,有些在基于标记的代码中更快。也就是说,与调整实际代码或数据库访问或内存处理相比,这些性能提升最小:我不会将基于标记的代码重构为基于脚本的代码,以试图找到性能提升。

答案 1 :(得分:1)

从CF11开始,all cf* tags are supported in cfscript

常规格式如下:

<!--- tag version --->
<cfwhatever arg1="val1" arg2="val2" ... />

<!--- script version --->
<cfscript>
  cfwhatever(arg1="val1", arg2="val2", ...);
</cfscript>

当您嵌套标签(即cfhttp / cfhttpparam)时,格式类似于-

<!--- tag version --->
<cfwhatever arg1="val1" arg2="val2" ...>
  <cfwhateverparam arg3="val3" ... />
</cfwhatever>

<!--- script version --->
<cfscript>
  cfwhatever(arg1="val1", arg2="val2", ...) {
    cfwhateverparam(arg3="val3", ...);
  };
</cfscript>

陷阱

我想我记得(尽管我没有找到有关此文档的文档)如果某些cf*标签在CF11之前已经具有cfscript替代方法,则不支持。

用作功能的CF标记不返回值,如果尝试以这种方式使用它们,则会产生错误:

<cfscript>
  cfwhatever(arg1="val1", arg2="val2", ...); //THIS IS OK

  var myresult = cfwhatever(arg1="val1", arg2="val2", ...); //SYNTAX ERROR!

  //generally, this is what you do instead:
  var myresult = '';
  cfwhatever(arg1="val1", arg2="val2", ..., variable="myresult");
</cfscript>

答案 2 :(得分:0)

在coldfusion 8及以下标签中,如cfmail在cfscript中不可用。然而,您可以通过将它包装在如下的函数中来调用它们:

<cffunction name="myCfEmail">
    <cfmail ...></cfmail>
</cffunction>

<cfscript>
    myCfEmail();
</cfscript>

在coldfusion 9中,您实际上可以为某些标签执行此操作。有关如何执行此操作,请参阅http://www.bennadel.com/blog/1663-Learning-ColdFusion-9-CFScript-Updates-For-Tag-Operators.htm