ColdFusion: Più StructKeyExists efficienti () al posto di TestDefinito ()
-
08-10-2019 - |
Domanda
Quale di questi è più efficiente in ColdFusion?
isDefined('url.myvar')
o
structKeyExists(url, 'myvar')
Soluzione
In questi giorni (CF8 +) la differenza di velocità non è che grande. Tuttavia, structKeyExists
è davvero un po 'più veloce. Ecco perché.
Quando si utilizza isDefined
, la stringa si passa viene cercato come un nome di chiave in diversi ambiti. A partire dal CF9, l'elenco degli ambiti, nell'ordine controllato è: ( href="http://fusiongrokker.com/post/scope-priority-changes-in-coldfusion-9">)
- locale (funzione locale, UDF e solo CFC)
- Argomenti
- Far passare locale (all'interno discussioni solo)
- query (non un vero e proprio campo di applicazione, vale per le variabili all'interno di cicli di query)
- Discussione
- Variabili
- CGI
- cffile
- URL
- Modulo
- Cookie
- Client
Anche se si utilizza il nome di ambito con isDefined
(come: if isDefined('variables.foo')
) l'elenco sarà ancora essere verificata in ordine; e se la local.variables.foo
variabile è definita, si troverà prima variables.foo
.
D'altra parte, structKeyExists
ricerca solo la struttura si passa per l'esistenza del nome della chiave; quindi ci sono molti meno posti dovrà guardare.
Utilizzando il codice più esplicito (structKeyExists
), non solo stai guadagnando alcune prestazioni, ma il codice è più leggibile e gestibile, a mio parere.
Altri suggerimenti
Usa quello che è più facile da leggere e migliori spettacoli quello che stai facendo.
La differenza tra i due è incredibilmente piccola, e molto probabilmente non vale la pena preoccuparsi affatto.
Non perdere tempo ottimizzando il codice a meno che non si dispone di un dimostrato e ripetibile test case che dimostra la lentezza.