22

在 ColdFusion 中,哪一个更有效?

isDefined('url.myvar')

或者

structKeyExists(url, 'myvar')
4

2 回答 2

41

这些天(CF8+)的速度差异不是很大。不过,structKeyExists确实是快了一点。这就是为什么。

当您使用isDefined时,您传入的字符串会在多个范围内作为键名进行搜索。从 CF9 开始,范围列表按检查顺序为:(来源

  1. 本地(仅限本地功能、UDF 和 CFC)
  2. 论据
  3. 线程本地(仅限内部线程)
  4. 查询(不是真正的范围,适用于查询循环中的变量)
  5. 线
  6. 变量
  7. 电脑动画
  8. CF文件
  9. 网址
  10. 形式
  11. 曲奇饼
  12. 客户

即使您将范围名称与isDefined(如:)一起使用if isDefined('variables.foo'),列表仍将按顺序检查;如果定义了变量local.variables.foo,它将在BEFORE variables.foo中找到。

另一方面,structKeyExists只搜索你传递给它的结构是否存在键名;所以它需要看的地方要少得多。

在我看来,通过使用更明确的代码 ( structKeyExists),您不仅可以获得一些性能,而且您的代码更具可读性和可维护性。

于 2010-10-18T03:33:10.757 回答
12

使用更易于阅读且最能显示您正在做的事情的那个。

两者之间的差异非常小,很可能根本不值得担心。

不要浪费时间优化代码,除非您有一个经过验证可重复的测试用例来证明速度很慢。

于 2010-10-18T11:20:53.423 回答