ColdFusion非范围与VARIABLES范围:性能与可读性?

时间:2014-09-27 16:22:19

标签: variables coldfusion scope

在我的ColdFusion代码中,我习惯于始终将变量范围视为我的默认范围(即,当另一个范围不适合时)。我的理解是,这提高了效率,因为ColdFusion处理器不必花费周期来确定包含变量的范围。但是,我总是对这使我的代码变得多么冗长感到恼火。

所以,我的问题是,实际上,明确确定每个变量值得冗长的变量吗?我知道每个应用程序都有不同的定义,值得,#34;但我想从更有经验的开发者那里得到一些意见。你总是把每个变量作为范围吗?仅限生产代码?您是否发现具有明确范围变量的代码更具可读性,并且增加的可读性是否更加优秀"更漂亮" (因为缺少一个更好的词)代码?提前感谢任何回复。

4 个答案:

答案 0 :(得分:5)

答案的客观部分(所以人们不投票将其关闭为#34;过于主观")是因为总是在确定变量范围内存在所谓的性能提升。也就是说,我听到了一些 - 轶事 - 建议在 ColdFusion (而不是Railo)上,没有确定变量范围变量的范围实际上更快。

在现实世界中:差异无关紧要。

我更倾向于保持代码更清晰,更容易阅读,为此我只说必要的范围变量 - 范围变量。

注意:即使CF会发现"发现"他们没有范围。不对这些范围进行限定似乎很麻烦(再次,主观,在这种情况下只有IMO)。

答案 1 :(得分:4)

确定范围时,有两件事需要考虑:

  1. 可读性
  2. 出血&性能
  3. 由于这两个原因,我(通常)会建议您在CFC类的范围内和范围内调整所有范围。如果你这样做,你永远不会对结果感到惊讶。但是,这是两种不同的情况:

    在CFC内:

    始终作为范围Variables,因为它是在类的方法和主体之间共享的“受保护”范围。只有在您确定要使用它时才使用它。您可以像实例化类的属性成员一样使用它,但如果您在单例类中使用它(缓存到Application范围),则要非常小心。这可能会导致意外出血。此外,如果有任何具有相同名称的外部变量,您可能会再次无意中将它们从空中抓取。不是你想要的。此外,不在CFC中确定Variables作用域的范围是令人困惑的,因为还存在不带作用域前缀的本地var作用域值。如果您在此处使用,请在此处Variables范围。

    在CFC之外:

    只要信息很清楚,你就可以不在CFM页面/包含范围内Variables。实际上应该没有性能损失,因为CF将首先检查此范围(在CFC之外)。我的一般偏好是在我设置/声明它时最初的范围,然后,如果它是清晰的并且在视觉上下文中,则保持未展开状态。如果页面很长,或者我将页面(例如长报告)打破成块(包括),我将确保再次为它添加前缀,以便它非常清楚它来自何处。如果我一直在考虑所有其他范围(我推荐),那么应该清楚地表明未编组的是Variables,但我希望它清楚。特别是如果其他人也在代码库上工作。因此,如果不清楚,请将其范围。好的经验法则。

    搜索顺序:

    最后,当人们谈论搜索顺序然后将CFC和页面范围混合在一起时,我讨厌它。请记住,它们是不同的,CF没有很好地或清楚地记录这些(LocalVar'相等',最后的胜利,Arguments将在{{1}之前找到在未声明或过载时,在CFC中,LocalVariables也会混合在一起。在页面(CFM模板/包含)中,Property范围是默认范围,首先进行搜索。查询块上下文中的查询范围是一个例外。再说一遍,并没有非常好的文档记录,在CF中我们并不总是像某些语言那样考虑块范围,但实际上这是一种情况。在查询上下文之外,期望Variables特朗普。如果您不确定案例,请对其进行范围测试或测试。另请注意,当CF遇到非前缀变量时,不会搜索VariablesthisRequestApplication范围。

答案 2 :(得分:2)

我参与了许多CFML项目,我看到开发人员的范围几乎都是一切,一些范围根本没有(不要这样做!),以及其他除了变量范围之外的所有范围。虽然范围界定很重要,但我认为对变量范围中的变量进行范围调整是过度的,会使代码膨胀,并且几乎不会为应用程序提供性能提升。

我会说范围除变量范围之外的所有内容。这将使您的代码库更容易阅读。专注于应用程序的其他领域,例如良好的缓存技术,数据库索引和查询优化,将HTML / CSS / JS资产最小化到浏览器等,这些都会对应用程序的执行情况产生明显的差异。

答案 3 :(得分:2)

我更喜欢范围内的一切,但我发现变量范围很烦人(一个字母的范围名称本来不错,比如v。是的我知道这听起来很傻。)我倾向于认为范围有助于提高可读性。

我(离开页面一段时间后)或其他开发人员查看我的代码,只需要看#form [...]#就知道页面的那一部分依赖于#form#variables。特别方便的情况是[url和/或form]和查询列具有相同的名称(如url.userID,form.userID,getUserInfo.userID)。

此外,自然地,冷聚变对于如何找到无范围的变量具有优先顺序。

  1. 功能本地(VAR关键字)
  2. 线程本地(CFTHREAD)
  3. 查询结果
  4. 功能ARGUMENTS
  5. Local VARIABLES
  6. CGI变量
  7. 文件变量
  8. 网址参数
  9. FORM字段
  10. COOKIE值
  11. 客户变量

    来源: In ColdFusion, variables are resolved in what order?

相关问题