Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ColdFusion: More efficient structKeyExists() instead of isDefined()

Which of these is more efficient in ColdFusion?

isDefined('url.myvar')

or

structKeyExists(url, 'myvar')
like image 363
James T Avatar asked Oct 18 '10 02:10

James T


2 Answers

These days (CF8+) the difference in speed is not that great. However, structKeyExists is indeed a little faster. Here's why.

When you use isDefined, the string you pass in is searched for as a key name in several scopes. As of CF9, the list of scopes, in the order checked is: (source)

  1. Local (function local, UDFs and CFCs only)
  2. Arguments
  3. Thread local (inside threads only)
  4. Query (not a true scope, applies for variables within query loops)
  5. Thread
  6. Variables
  7. CGI
  8. CFFile
  9. URL
  10. Form
  11. Cookie
  12. Client

Even if you use the scope name with isDefined (like: if isDefined('variables.foo')) the list will still be checked in order; and if the variable local.variables.foo is defined, it will be found BEFORE variables.foo.

On the other hand, structKeyExists only searches the structure you pass it for the existence of the key name; so there are far fewer places it will have to look.

By using more explicit code (structKeyExists), not only are you gaining some performance, but your code is more readable and maintainable, in my opinion.

like image 75
Adam Tuttle Avatar answered Oct 17 '22 08:10

Adam Tuttle


Use the one which is easier to read and best shows what you're doing.

The difference between the two is incredibly small, and very likely not worth worrying about at all.

Don't waste time optimising code unless you have a proven and repeatable test case which demonstrates the slowness.

like image 27
Peter Boughton Avatar answered Oct 17 '22 10:10

Peter Boughton