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.
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
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
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
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
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
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
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.