【问题标题】:Is there a tangible performance or readability benefit to using tags versus CFSCRIPT?与 CFSCRIPT 相比,使用标签是否有明显的性能或可读性优势?
【发布时间】:2012-03-14 02:48:01
【问题描述】:

我正在使用 ColdFusion 8 和 9。

我昨天阅读了一些 ColdFusion 最佳实践。我遇到了一个建议尽可能始终使用 CFSCRIPT 的部分。原因是每个 CFSET 都是一个单独的请求,需要由服务器打开和关闭(或类似的东西)。由于 CFSCRIPT 是作为单个代码块处理的,因此只需要打开和关闭一次,从而减少服务器进程的时间。此建议是针对 ColdFusion 5 明确给出的。

我想知道这个建议在将近十年后的今天是否适用。就个人而言,我 99% 的时间都在使用 CFSCRIPT。但是,我确实与只使用标签的人一起工作。在我正在进行的一个项目中,我在一个函数中遇到了这段代码:

<cfset LOCAL.TrackingInfo = structnew()>
<cfset LOCAL.TrackingInfo.referral = CGI.HTTP_REFERER>
<cfset LOCAL.TrackingInfo.ipaddress = CGI.REMOTE_ADDR>
<cfset LOCAL.TrackingInfo.useragent = CGI.HTTP_USER_AGENT>
<cfset LOCAL.TrackingInfo.querystring = CGI.QUERY_STRING>

我会将其修改为如下所示:

<cfscript>
    LOCAL.TrackingInfo = structNew();
    LOCAL.TrackingInfo.referral = CGI.HTTP_REFERER;
    LOCAL.TrackingInfo.ipaddress = CGI.REMOTE_ADDR;
    LOCAL.TrackingInfo.useragent = CGI.HTTP_USER_AGENT;
    LOCAL.TrackingInfo.querystring = CGI.QUERY_STRING;
</cfscript>

对我来说,好处是可读性。而且,在 CFSCRIPT 和 JavaScript 和 Java(我做过的小 Java)之间来回切换真的很容易。

使用 CFSCRIPT 是否有明显的可读性或性能优势?非初学者有什么理由继续使用 CF 标签吗?

【问题讨论】:

  • 个人认为,基于标签的语言与JS等不同,增强了它的可读性。我看着一个,我立即知道我在哪一个工作。
  • 我更喜欢 cfscript 只是因为我不必输入那么多(&lt;cfset ... /&gt; 一遍又一遍地让人厌烦)。我倾向于只在我的视图中使用标签,并将我的控制器/模型保存在脚本中。
  • 当您必须与具有 C# 背景的开发人员进行代码审查时,使用 cfscript 也很有用。一些开发人员发现阅读传统的 cfml 很困难

标签: coldfusion coldfusion-9 coldfusion-8 coldfusion-7


【解决方案1】:

当这被提交给 CF 团队时,他们说使用 cfscript 的差异可以忽略不计,但它是如此之小,以至于没有人应该担心它。这是 cfscript 函数的编写方式(在标签中),因此与额外的函数调用相关的成本很小。如果您发现任何类型的负载或速度测试存在差异,我会感到惊讶。

快速编辑:您在上面的示例中使用的内容没有区别,我所做的声明仅涉及 CF9 中的新 cfscript 语言增强功能。

【讨论】:

  • 您的答案涉及性能方面。可读性如何?如果您整天都在处理 HTML,那么 CFML 更容易编写。如果你处理 JavaScript,标签看起来很陌生,但 CFSCRIPT 看起来不错。你能解决可读性方面的问题吗?
  • 就我个人而言,CFSCRIPT 似乎更具可读性。语法反映了其他编程/脚本语言的语法,并且缺少 CFTAGS(打开和/或关闭)可以清理显示并减少行数。当您在 CFSCRIPT 中编写整个 CFC 时尤其如此。我真正喜欢使用 CFML 标签的唯一一次是使用查询。 CFQUERY 有这么大的力量。
  • 最初的问题是专门针对速度提出的,这是可以衡量的。可读性是基于意见的事情之一,因此我们很难衡量它。在我的意见中,我阅读脚本比我可以遵循标签要好得多。这对我来说是毫无疑问的,但其他人会认为标签更冗长,因此更容易理解。这是一个滑坡!
  • 个人认为标签更容易阅读不是因为它们比较冗长,而是因为我可以看一段代码立即知道它是CF而不是JS,Java,等等。我知道当有人使用它来设置一些变量时,CFSCRIPT 会让我发疯。
【解决方案2】:

在现代版本的语言中没有真正的速度差异。至于可读性,这完全取决于谁在阅读。我与各种各样的 CF 人员一起工作。其中一些人很难遵循 CFSCRIPT,而其他人则是他们曾经尝试使用的所有内容(几乎到了矫枉过正的地步)。就我个人而言,我会说采用您最喜欢的方法,并且无论与您一起工作的团队是否可以接受,这也是一种方法。我认为这里的最终目标是生成团队中每个人都可以在需要时轻松理解和支持的代码。可读性参数的一个例子可能是我知道这里有人会说你的 CFSCRIPT 块不像这样可读:

<cfscript>
    LOCAL.TrackingInfo  = { referral = CGI.HTTP_REFERER, 
                            ipaddress = CGI.REMOTE_ADDR, 
                            useragent = CGI.HTTP_USER_AGENT, 
                            querystring = CGI.QUERY_STRING };
</cfscript>

我不认为你们中的任何一个比另一个“更正确”。只是个人编码风格的差异。

或者另一个例子,我与一个坚持所有 CF 标签和属性都用大写字母一起工作的人一起工作。他们陈述的原因是它有助于提高可读性。当它全部大写时,我没有发现它更容易或更难阅读。如果有的话,我发现在弄乱这些特定项目的代码时总是按住 shift 套件或按下大写锁定只是一件麻烦事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    相关资源
    最近更新 更多