cf_supercache: BOOOST your CF-Apps

by marcus on 08/05/2003



Mich wundert immer wieder, wie unbekannt einer meiner Lieblings-CustomTags ist: cf_supercache. Durch diesen Tag kann man dank des extrem performanten in-memory-caching ExecutionTimes im niedrigen zweistelligen Millisekunden-Bereich erreichen…Das Prinzip ist gleichermaßen einfach wie genial: statt klassisches Filecaching durchzuführen (was auch angeboten, aber von mir nicht derart angepriesen wird) , speichert cf_supercache die zu cachenden Nutzdaten, also nur der HTML-Content, der zum Browser geschickt werden soll, im Server-Scope.

Das Einbinden des Tags ist trivial:

<cf_supercache …..>
[… jede Menge CF-Tags, die gaaanz viel Zeit benötigen …]
</cf_supercache>

Beim ersten Durchlauf werden die CF-Tags innerhalb von cf_supercache normal ausgeführt, der Wert von thisTag.generatedContent aber direkt danach in den Server-Scope geschrieben. Beim nächsten Aufruf wird, sofern der Expires-Wert nicht abgelaufen ist, der Inhalt aus dem Server-Scope, also direkt aus dem RAM, gelesen. ALLE CF-Tags innerhalb von cf_supercache werden dann übersprungen. Ellenlanges Stringparsing, Mega-Queries – alles! 🙂
Der Effekt ist wirklich gigantisch. Netter Nebeneffekt: die gespeicherten Inhalte können dank des Argumentes “stripWhiteSpace” direkt von überflüssigen Leerzeilen befreit werden.

cf_supercache gibt es entweder in der Taggallery oder hier. Ich habe hier eine modifizierte Version hochgeladen, da die originale attributes.name als Tag-Argument nutzt. Da dies in CF > 4.01 wegen der Dot-Notation nicht mehr erlaubt ist, habe ich “attributes.name” durch “attributes.cacheName” ersetzt.

Download SuperCache151.zip (3113 Bytes)

urs May 18, 2003 at 12:00 am

bringt bei queries nur dann etwas, wenn die syntax immer gleich ist, oder?

agent m May 20, 2003 at 12:00 am

hi urs,

nein, ganz im gegenteil. du definierst einen kompletten teil des templates als “zu cachenden bereich” und vergibst für diesen eine eindeutige ID und verfallzeit.

ALLES, was innerhalb des tags steht, wird übersprungen, wenn der zeitraum, der mit cachedwithin angegeben wird, noch nicht abgelaufen ist. das hat mit der syntax von sql-statements nichts zu tun – ich könnte ja auch bereiche cachen, in denen nur mit cfloop gearbeitet wird.

bye,
marcus

Uwe Raddatz May 21, 2003 at 12:00 am

Sieht mir ja ganz nach ‘ner Kopie von cfa_generatedcontentcache aus. 😉

agent m May 21, 2003 at 12:00 am

hi uwe,

stimmt, vom prinzip her sind beide tags verdächtig ähnlich. nun sind beide ja hauseigene macromedia-entwicklungen – da ist sicherlich nicht ausgeschlossen, dass sich tischnachbarn ideen abgucken 🙂

gut ist halt, das cf_s auch ohne spectra funktioniert.

bye,
marcus

Uwe Raddatz May 22, 2003 at 12:00 am

Ach so. Wusst’ ich gar nicht, dass das aus dem gleichen Hause stammt.

Andreas Greiner June 28, 2003 at 12:00 am

Geniales Teil,

ich habs heute zum ersten Mal ausprobiert und bin vollkommen überzeugt und zufrieden.

Bloginblack und die Tipps sind Spitze!

Andreas

Comments on this entry are closed.

Previous post:

Next post: