在 ColdFusion 中,哪一个更有效?
isDefined('url.myvar')
或者
structKeyExists(url, 'myvar')
在 ColdFusion 中,哪一个更有效?
isDefined('url.myvar')
或者
structKeyExists(url, 'myvar')
这些天(CF8+)的速度差异不是很大。不过,structKeyExists
确实是快了一点。这就是为什么。
当您使用isDefined
时,您传入的字符串会在多个范围内作为键名进行搜索。从 CF9 开始,范围列表按检查顺序为:(来源)
即使您将范围名称与isDefined
(如:)一起使用if isDefined('variables.foo')
,列表仍将按顺序检查;如果定义了变量local.variables.foo
,它将在BEFORE variables.foo
中找到。
另一方面,structKeyExists
只搜索你传递给它的结构是否存在键名;所以它需要看的地方要少得多。
在我看来,通过使用更明确的代码 ( structKeyExists
),您不仅可以获得一些性能,而且您的代码更具可读性和可维护性。
使用更易于阅读且最能显示您正在做的事情的那个。
两者之间的差异非常小,很可能根本不值得担心。
不要浪费时间优化代码,除非您有一个经过验证且可重复的测试用例来证明速度很慢。