在ColdFusion中,哪个更有效?

isDefined('url.myvar')

要么
structKeyExists(url, 'myvar')

最佳答案

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

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

  • 本地(本地函数,仅UDF和CFC)
  • 参数
  • 本地线程(仅内部线程)
  • 查询(不是真正的作用域,适用于查询循环中的变量)
  • 线程
  • 变量
  • CGI
  • CFFile
  • URL
  • 表格
  • Cookie
  • 客户端

  • 即使将作用域名称与isDefined一起使用(如if isDefined('variables.foo')),列表也将按顺序检查;如果定义了local.variables.foo变量,则可以在variables.foo之前找到它。

    另一方面,structKeyExists仅在传递给它的结构中搜索键名的存在;因此需要寻找的地方要少得多。

    通过使用更明确的代码(structKeyExists),不仅可以提高性能,而且我认为您的代码更具可读性和可维护性。

    关于performance - ColdFusion:效率更高的structKeyExists()而不是isDefined(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3956324/

    10-12 19:57