performance - ColdFusion: structKeyExists() más eficiente en lugar de isDefined()
optimization cfml (2)
¿Cuál de estos es más eficiente en ColdFusion?
isDefined(''url.myvar'')
o
structKeyExists(url, ''myvar'')
En estos días (CF8 +) la diferencia de velocidad no es tan grande. Sin embargo, structKeyExists
es de hecho un poco más rápido. Este es el por qué.
Cuando usa isDefined
, la cadena que pasa se busca como nombre de clave en varios ámbitos. A partir de CF9, la lista de ámbitos, en el orden verificado es: ( source )
- Local (función local, UDF y CFC solamente)
- Argumentos
- Hilo local (solo hilos internos)
- Consulta (no es un ámbito verdadero, se aplica a las variables dentro de los bucles de consulta)
- Hilo
- Variables
- CGI
- CFFile
- URL
- Formar
- Galleta
- Cliente
Incluso si utiliza el nombre del ámbito con isDefined
(como: if isDefined(''variables.foo'')
), la lista se verificará en orden; y si la variable local.variables.foo
está definida, se encontrará ANTES de las variables.foo
.
Por otro lado, structKeyExists
solo busca la estructura por la que se pasa la existencia del nombre de clave; así que hay muchos menos lugares donde tendrá que buscar.
Al usar un código más explícito ( structKeyExists
), no solo está obteniendo algo de rendimiento, sino que su código es más legible y mantenible, en mi opinión.
Use el que sea más fácil de leer y que muestre mejor lo que está haciendo.
La diferencia entre los dos es increíblemente pequeña, y es muy probable que no valga la pena preocuparse en absoluto.
No pierda tiempo optimizando el código a menos que tenga un caso de prueba comprobado y repetible que demuestre la lentitud.