ColdFusion:更有效的structKeyExists()而不是isDefined()

时间:2010-10-18 02:51:16

标签: performance optimization coldfusion cfml premature-optimization

哪些在ColdFusion中效率更高?

isDefined('url.myvar')

structKeyExists(url, 'myvar')

2 个答案:

答案 0 :(得分:38)

这些天(CF8 +),速度差异 。但是,structKeyExists确实要快一点。这就是原因。

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

  1. 本地(仅限本地功能,UDF和CFC)
  2. 参数
  3. 线程本地(仅限内部线程)
  4. 查询(不是真正的范围,适用于查询循环中的变量)
  5. 变量
  6. CGI
  7. CFFILE
  8. URL
  9. 表格
  10. 曲奇
  11. 客户端
  12. 即使您将范围名称与isDefined一起使用(例如:if isDefined('variables.foo')),仍会按顺序检查列表;如果定义了变量local.variables.foo,则会找到 BEFORE variables.foo

    另一方面,structKeyExists仅搜索您传递给它的结构是否存在密钥名称;所以要看的地方要少得多。

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

答案 1 :(得分:10)

使用更易于阅读的,并最好地展示您正在做的事情。

两者之间的区别是难以置信小,很可能根本不值得担心。

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