Можем ли мы заменить каждый тег ColdFusion эквивалентными операторами cfscript? - PullRequest
4 голосов
/ 18 августа 2011

Я хотел бы знать, может ли моя cfml-страница или компоненты cfc иметь только тег cfscript?

Можем ли мы использовать его везде? Есть ли ограничения в его использовании?

Edit:

Мне любопытно, потому что я прочитал следующую строку

В дополнение к настройке переменной, другие операции, как правило, немного быстрее в CFScript, чем в тегах.

Прочтите здесь

Ответы [ 3 ]

9 голосов
/ 18 августа 2011

Большинство тегов теперь реализованы как реализации, поддерживающие 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 только для скрипта ... вы немного застряли.

Также я думаю, что некоторые конструкции, такие как CFQUERY, являются более элегантным решением, чем подход Query.cfc.

Что касается комментария о том, что CFScript работает быстрее, чем код, основанный на тегах, то на самом деле это не так, поскольку компилятор изменяется в CFMX7.0. В основном код компилируется в одно и то же время. Некоторые операции выполняются быстрее в CFScript, некоторые быстрее в коде на основе тегов. Тем не менее, этот прирост производительности будет минимальным по сравнению с настройкой вашего фактического кода, доступа к БД или обработки памяти: я бы не реорганизовывал код на основе тегов в код на основе сценариев, чтобы попытаться найти прирост производительности.

1 голос
/ 08 апреля 2019

Начиная с CF11, все теги cf* поддерживаются в 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>

Gotchas

Мне кажется, я помню (хотя я не нашел документации для этого), что некоторые теги cf* неподдерживается, если у них уже была альтернатива cfscript до CF11.

Теги 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>
0 голосов
/ 18 августа 2011

В 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 о том, как это сделать.

...