Gute Zeilen, schlechte Zeilen – Folge 2

by marcus on 02/05/2003



Setzen von Variablen

Ja, richtig gelesen – sogar beim schnöden Setzen von Variablen kann man die Execution Time eines CF-Templates massiv nach unten drücken, wenn man einige kleine Spielregeln beachtet.

Entscheidend ist hierbei in erster Linie
die Anzahl der Variablen, die man an der zu optimierenden Stelle findet.

Grundsätzlich gilt:

  • Beim Setzen von 1-2 Variablen genügt ein gewöhnliches CFSET
  • Ab der dritten Variable ist ein CFSCRIPT schneller

Man kann sich CFSCRIPT also quasi wie einen Motor vorstellen, der die Zeit
für’s Setzen von zwei Variablen braucht, um vernünftig zu starten. 😉
Als Beispiel habe ich einen kleinen Codeblock jeweils in der "normalen" und
als CFSCRIPT-Version angelegt:

Normal CFSCRIPT
<cfloop from="1" to="10000" index="x">
<cfset x1 = 1>
<cfset x2 = "hallo">
<cfset x3 = "noch eine variable">
<cfset x4 = "schon wieder eine">
<cfset x5 = 3*5>
<cfset x6 = 2000.01>
</cfloop>
<cfloop from="1" to="10000" index="x">
<cfscript>
x1 = 1;
x2 = "hallo";
x3 = "noch eine variable";
x4 = "schon wieder eine";
x5 = 3*5;
x6 = 2000.01;
</cfscript>
</cfloop>

Probiert’s aus – die CFSCRIPT-Version läuft ca. 40% schneller. Der Code
läuft direkt per copy&paste in allen CF-Versionen ab 4.0.

Andreas Greiner May 2, 2003 at 12:00 am

Hallo Marcus,

im neuen MX-Buch steht aber etwas gegensätzliches. Ab der Version MX gibt es keine Unterschiede mehr zwischen CFSET & CFSCRIPT.

Habe ich da etwas falsch verstanden, oder beziehst du dich auf Versionen unter MX?

Andreas Greiner

marcus May 2, 2003 at 12:00 am

Hallo Andreas,

in Versionen *vor* MX trifft dies auf jeden Fall zu.
Bei MX, auch wenn es im neuen Buch steht, sehe ich de facto auch noch einen Vorteil von CFSCRIPT gegenüber normalen CFSETs – ein paar Tests haben eben die bis zu ca. 40% schnellere Abarbeitung dargelegt.

Um ganz sicher zu gehen, habe ich den Code hier auf meiner Workstation noch einmal mit CF4.5 und der CFMX-Eval getestet – CFSCRIPT ist bei beiden schneller.

bye,
marcus

Kai May 3, 2003 at 12:00 am

Hallo Marcus und Andreas,

ich kann Marcus’ Zahlen nur bestätigen. Der gepostete Beispielcode zeigt in etwa 30%-40% Performance-Vorteile für cfscript.

Es gibt noch ein drastischeres Beispiel, nämlich einfach eine inhaltlich leere Index-Schleife, die einmal mit cfloop und einmal in cfscript mit for gebaut ist. Die Lösung in cfscript läuft bis zu fünfmal schneller!

Ich habe die von Dir angeführte Stelle im Buch leider auf Anhieb nicht gefunden, kannst Du mal bitte posten, wo das steht?

Kai

Andreas Greiner May 3, 2003 at 12:00 am

Hallo ihr beiden,

jetzt habe ich die Stelle leider nicht auf die Schnelle gefunden, dafür aber die Bestätigung deines Artikels.

Auf Seite 78 unten steht ähnliches – nur irgendwo in diesem Buch (am Anfang) stand auch, dass in CFMX cfscript nicht mehr soviel bringt.

Ich lasse mich aber gerne überzeugen 🙂

Andreas

Kai May 3, 2003 at 12:00 am

Hallo Andreas,

da vertust Du Dich jetzt aber. Seite 78 geht nur auf den generellen Performance-Unterschied zwischen verschachtelten IFs und SWITCH/CASE ein, da ist die Unterscheidung zwischen tag- oder script-basierter Schreibweise noch gar nicht drin.

Auf Seite 52 habe ich gerade gefunden: “…beide Schreibweisen sind ebenbürtig.”, meinst Du vielleicht diese Stelle?

Kai

Andreas May 12, 2003 at 12:00 am

Hi,

ja, genau diese Stelle meinte ich. Tja, hab ich mich wohl bisschen vertan in der Eile.

Wie kann man jetzt zu deiner/eurer Meinung und der Meinung des Buches stehen? Was gilt?

lg,
Andreas

Kai May 13, 2003 at 12:00 am

Hi Andreas,

die Meinung des Buches ist richtig – der Code ist vom Effekt her (der Schreibweise) ebenbürtig. Er ist aber nicht hinsichtlich der Performance ebenbürtig. Bau doch einfach die Codestücke mal selbst nach, und probiere es aus 😉

Viele Grüße,
Kai

Comments on this entry are closed.

Previous post:

Next post: