Coldfusion: Effizientere StructKeyExists () anstelle von IsDefined ()
-
08-10-2019 - |
Frage
Welche dieser ist effizienter in Coldfusion?
isDefined('url.myvar')
oder
structKeyExists(url, 'myvar')
Lösung
In diesen Tagen (CF8 +) die Geschwindigkeitsdifferenz ist nicht , die groß. Allerdings ist structKeyExists
in der Tat ein wenig schneller. Hier ist der Grund.
Wenn Sie isDefined
verwenden, die Zeichenfolge, die Sie in PASS für als Schlüsselnamen in verschiedenen Bereichen gesucht. Ab CF9, die Liste der Bereiche, geprüft in der Reihenfolge: ( Quelle )
- Local (Funktion lokal, UDF und FCKW nur)
- Argumente
- Thread-lokal (Innengewinde nur)
- Abfrage (keine wahre Umfang, gilt für Variablen innerhalb Abfrage Loops)
- Thema
- Variablen
- CGI
- cffile
- URL
- Form
- Cookie
- Client
Auch wenn Sie die Bereichsnamen mit isDefined
verwenden (wie: if isDefined('variables.foo')
) wird die Liste noch um überprüft werden; und wenn der Variable local.variables.foo
definiert ist, wird man finden, bevor variables.foo
.
Auf der anderen Seite sucht structKeyExists
nur die Struktur, die Sie es für die Existenz des Schlüsselnamen übergeben; so gibt es viel weniger Plätze es zu sehen haben.
Mit dem expliziten Code (structKeyExists
), sind Sie nicht nur eine Leistung zu gewinnen, aber der Code ist besser lesbar und wartbar, meiner Meinung nach.
Andere Tipps
Verwenden Sie die eine, die ist leichter lesen und am besten zeigt, was Sie tun.
Der Unterschied zwischen den beiden ist unglaublich klein und sehr wahrscheinlich nicht der Mühe wert überhaupt.
Verschwenden Sie keine Zeit zu optimieren Code nicht, wenn Sie ein haben bewiesen und wiederholbar Testfall , die die Langsamkeit demonstriert.