Folge 3 – Ja oder Nein?
Genau dies ist die häufigste Frage, die man CF stellen sollte, denn mit boolschen
Abfragen kommt es mit Abstand am schnellsten zurecht. Wann immer möglich, sollte
man daher versuchen, IF-Abfragen nur nach true oder false auszuwerten.
Ein paar Beispiele hierzu:
Gut |
<cfif isDefined("variables.blah") eq "true"> … </cfif> |
Besser |
<cfif isDefined("variables.blah")> |
Wenn ein Wert sowieso schon im boolschen Format vorliegt, verschenkt man mit
der linken Variante Zeit, denn in dieser Form wird "true" von CF als String verglichen,
und Stringvergleiche sind de facto langsamer.
Gut |
<cfif len(variables.blah) GT 0> … </cfif> |
Besser |
<cfif len(variables.blah)> … </cfif> |
Gut |
<cfif variables.blah neq ""> … </cfif> |
Besser |
<cfif len(variables.blah)> … </cfif> |
Gut |
<cfif variables.blah eq ""> … </cfif> |
Besser |
<cfif not len(variables.blah)> … </cfif> |
Gut |
<cfif variables.blah eq "test"> … </cfif> |
Besser |
<cfif not compareNoCase(variables.blah, "test"> … </cfif> |
Das sind einige Standardkandidaten, die ich in "zu tunenden" Applikationen
immer wieder finde.
Im ersten Fall ist blah eine Zahl, man kann sich das gt
0 also komplett sparen,
da Zahlen > 0 von CF als true angesehen werden.
Der zweite Fall fragt ab, ob blah kein Leerstring ist, aber – wie der Name
schon sagt, es ist eben ein Stringvergleich. len() liefert die Länge des Strings,
also eine Zahl zurück, und diese wird, wie bei Fall 1, als true angesehen,
sofern sie > 0 ist.
Fall 3 zeigt das umgekehrte Beispiel mit not
len(), also wenn 0 als Länge zurückgegeben
wird.
Fall 4 macht sich die Funktionsweise von compareNoCase() zu nutze: bei Gleichheit
zweier Strings wird 0 zurückgegeben, und die ist – jepp, false.
Schlecht |
<cfif FileExists("#path##FileName#") <cfif theFileExists EQ "YES"> |
Besser |
<cfif fileExists("#path##FileName#")> <cfif theFileExists> |
Wirklich, das habe ich *echt so* vorgefunden. Die Stringabfrage nach "yes/no" muss natürlich weg, das zweite fileExists() macht noch weniger Sinn,
denn wenn die erste
Abfrage
false zurückgibt, muss man nicht noch einmal abfragen, ob die Datei nicht vorhanden
ist. 🙂
Wenn man sich sich an diese Art des Abfragens gewöhnt hat, spart man deutlich
an ExecutionTime. Dies alles sind zwar nur kleine Effekte, aber wenn
man nur 10ms Prozessorzeit pro Aufruf spart, spart man bei 5.000 Aufrufen 50s.
Wie sehr sich dies bei HighTraffic-Sites summiert, kann man sich ausrechnen…
Halloechen!
kann mir einer von Euch ein Script zur Verfuegung stellen
mit welchem ich Eure XML-Daten (und wenn es geht die von heise) in meiner Seite einbinden kann?
Vielen Dank & Gruss
JimBob
Hi!
An sich schon, aber warum schreibst Du Dir das nicht selbst? 😉 XML-Daten in CF verarbeiten ist doch nicht schwer?
Fuer welche Seite ueberhaupt? 🙂
Kai
Hallo nochmal!
Wenn ich das mit XML in CF drauf haette wuerde ich ja nicht fragen 😉
habe nur 2 CF4.5 zertifikate und da wurde nicht wirklich was mit xml durchgenommen.
wuerde gerne auf einer Seite die entsteht externe Daten einbinden.
z.B.: http://www.bloginblack.de/index.rdf
oder: http://www.heise.de/newsticker/heise.rdf
Gruss, JimBob
mit einem Beispiel waere mir hier gut geholfen (auch fuer die Zukunft) . . . Danke!
wo kann ich ein CFMX-Training absolvieren?
Nochmal Gruss, JimBob
Hi,
in der Macromedia Taggallery kannst Du den CustomTag cf_soXML runterladen – mit dem ist das Handling von XML-Daten sehr einfach:
http://devex.macromedia.com/developer/gallery/info.cfm?ID=A28467B5-F7B9-11D6-840E00508B94F85A&method=Full
Wenn Du dazu noch Fragen hast – kein Thema.
Schulungen kann man bei einigen MM-Partnern buchen, spontan fällt mir da mein Arbeitgeber ein:
http://www.msg-at.net
🙂
bye,
marcus
hm.
ich komme mir schon etwas unklug vor wenn ich nun noch immer sagen muss, dass ich die externen xml-daten noch immer nicht auf meiner seite darstellen kann (trotz SOXML-tag) . . . grr!
help please! mailto:leoleylan@gmx.net
bis dann & gruss
jimbob
Hi JimBob,
also nochmal langsam… Du möchtest auf einer Deiner Seiten die rdf-Streams von Heise und uns verwenden?
1. Welche CF-Version verwendest Du?
2. Was genau soll ich Dir liefern? Ein Beispiel, um die Daten weiter zu verarbeiten oder das RDF als HTML-Snippet aufbereitet?
3. ColdFusion MX Trainings gibt es z.B. unter http://www.msg-at.net/training – mit Marcus und/oder mir als Trainer 😉
hi,
das RDF als HTML-Snippet aufbereitet waere natuerlich optimal . . . vielen Dank!
bekommt man Euch dann auch das Training Macromedia certified?
Bis dann + Gruss
Jimbob
Comments on this entry are closed.