performance optimization coldfusion cfml premature-optimization

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 )

  1. Local (función local, UDF y CFC solamente)
  2. Argumentos
  3. Hilo local (solo hilos internos)
  4. Consulta (no es un ámbito verdadero, se aplica a las variables dentro de los bucles de consulta)
  5. Hilo
  6. Variables
  7. CGI
  8. CFFile
  9. URL
  10. Formar
  11. Galleta
  12. 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.