ColdFusion: Más structKeyExists eficientes () en lugar de IsDefined ()
-
08-10-2019 - |
Pregunta
¿Cuál de estos es más eficiente en ColdFusion?
isDefined('url.myvar')
o
structKeyExists(url, 'myvar')
Solución
En estos días (+) CF8 la diferencia de velocidad no es que grande. Sin embargo, structKeyExists
es de hecho un poco más rápido. He aquí por qué.
Cuando se utiliza isDefined
, la cadena se pasa en se busca como un nombre clave en varios ámbitos. A partir de CF9, la lista de alcances, en el orden comprobado es: ( fuente href="http://fusiongrokker.com/post/scope-priority-changes-in-coldfusion-9">)
- Local (función local, UDF y los CFC solamente)
- Argumentos
- Thread local (dentro de los hilos solamente)
- Consulta (no un verdadero alcance, se aplica para las variables dentro de los bucles de consulta)
- Tema
- Variables
- CGI
- cffile
- URL
- Formulario
- Cookie
- Cliente
Incluso si se utiliza el nombre del ámbito de isDefined
(como: if isDefined('variables.foo')
) la lista todavía será controlada con el fin; y si se define la variable de local.variables.foo
, se encontró antes variables.foo
.
Por otro lado, sólo se busca en structKeyExists
la estructura se le pasa por la existencia del nombre de la clave; por lo que hay muchos menos lugares que tendrá que buscar.
Mediante el uso de un código más explícita (structKeyExists
), que no sólo está ganando algo de rendimiento, pero su código es más legible y fácil de mantener, en mi opinión.
Otros consejos
Utilice la que es más fácil de leer y mejores espectáculos de lo que está haciendo.
La diferencia entre los dos es muy pequeña, y muy probablemente no vale la pena preocuparse en absoluto.
No pierda tiempo en la optimización de código a menos que tenga una probada y repetible caso de prueba que demuestra la lentitud.