Gute Zeilen, schlechte Zeilen – Folge 3

by marcus on 22/05/2003



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")>

</cfif>

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#")
EQ "YES">
   <cfset theFileExists="YES">
<cfelseif FileExists("#path##FileName#") EQ "NO">
   <cfset theFileExists="NO">
</cfif>

<cfif theFileExists EQ "YES">

</cfif>

Besser

<cfif fileExists("#path##FileName#")>
   <cfset theFileExists="YES">
<cfelse>
   <cfset theFileExists="NO">
</cfif>

<cfif theFileExists>

</cfif>

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…

{ 8 comments… read them below or add one }

JimBob May 27, 2003 at 12:00 am

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

Reply

Kai May 28, 2003 at 12:00 am

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

Reply

JimBob May 28, 2003 at 12:00 am

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

Reply

JimBob May 28, 2003 at 12:00 am

mit einem Beispiel waere mir hier gut geholfen (auch fuer die Zukunft) . . . Danke!
wo kann ich ein CFMX-Training absolvieren?
Nochmal Gruss, JimBob

Reply

agent m May 28, 2003 at 12:00 am

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

Reply

JimBob June 2, 2003 at 12:00 am

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

Reply

Kai June 2, 2003 at 12:00 am

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 😉

Reply

JimBob June 5, 2003 at 12:00 am

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

Reply

Cancel reply

Leave a Comment

Previous post:

Next post: