![]() |
| | LinkBack | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Christian W. Achatz Registriert seit: 05.02.2007 Ort: München
Beiträge: 198
| View based caching 1. Einführung Während einer Diskussion im Forum wurde die Idee des view based caching geboren. Ausgelöst durch einen Einwurf von Alberto begannen wir über Performance-Optimierungen und verschiedene Caching-Methoden zu sprechen. Am Ende der Diskussion kamen die Beteiligten darüber ein, dass das Caching von einzelnen Teilen einer Applikation ein effektives Mittel für die Steigerung der Performance ist. Dies kann durch eine auf cURL basierende Lösung, die von Alberto vorgestellt wurde oder durch view based caching erreicht werden. Der Vorteil von view based caching ist, dass die Applikation selbst nicht an die Cache-Strategie angepasst werden muss. Dieser Artikel beschreibt die technische Idee und die Umsetzung mit den Mitteln des Adventure PHP Framework. 2. Views? Um die Idee besser verdeutlichen zu können, zunächst ein paar Worte zum Thema Views. In APF-Terminologie sind Views nichts anderes als Templates, die von anderen eingebunden werden. Ein Webseiten-Layout, das importdesign-Tags beinhaltet definiert bereits Views. Wie im Kapitel Klassen beschrieben wird, erzeugt die PageController-Implementierung einen Objektbaum aus den bekannten Tags in einem Template. Jeder Tag besteht dabei aus seiner Definition - etwa Code: <my:tag attr1="value1" attr2="value2" /> PHP-Code: Wie kann diese Information nun genutzt werden um view based caching zu implementieren? Ganz einfach: dank der generischen PageController-Implementierung kann der Entwickler eigene Taglibs erzeugen, die die bisherige Funktion einer Taglib erweitern. Das bedeutet, dass der bisherige Template-Include-Mechanismus einfach um eine Caching-Funktion ergänzt werden muss - die Basis von view based caching! 3. Implementierung 3.1. Let's get started Wie im Kapitel Standard-Taglibs beschrieben ist, kann der <core:importdesign />-Tag dazu verwendet werden, ein Template als Kind des aktuellen DOM-Knoten einzubinden. Hierzu muss lediglich der Namespace des Templates und dessen Namen in den Attributen des Tags spezifiziert werden. Wie bereits weiter oben bemerkt, kann dieser Tag dazu verwendet werden, um einen View innerhalb eines Layout-Templates zu definieren. Ein View kann dabei z.B. den Header, Footer oder die Navigation einer Seite beinhalten. Da wir nur den Inhalt von speziellen Views einer Seite cachebar gestalten wollen, kann diese TagLib als Basis genutzt werden. Um das zu verdeutlichen, ist in der folgenden Codebox die Implementierung der Taglib dargestellt: PHP-Code: 3.2. Der CacheManager Das Framework beinhaltet mit dem CacheManager eine flexible Caching-Komponente mit verschiedenen Backends. In diesem Fall ist jedoch ein einfacher Text-Cache-Mechanismus ausreichend, der im Kapitel Text-Cache-Provider der CacheManager-Dokumentation beschrieben ist. Um diesen verwenden zu können, ist es notwendig, eine Konfiguration anzulegen. Diese hat gemäß der Dokumentation die folgende Gestalt: Code: [view_based_cache] Cache.Provider.Namespace = "tools::cache::provider" Cache.Provider.Class = "TextCacheProvider" Cache.Active = "true" Cache.BaseFolder = "/path/to/my/cache/base/folder" Cache.Namespace = "view::one" PHP-Code: 3.3. Endmontage Um den Inhalt eines Views cachen zu können, werden nun die beiden Teile aus Kapitel 3.1 und 3.2 zusammengefügt: PHP-Code: 4. Anwendung Die Anwendung der Caching-TagLib unterscheidet sich kaum von der Verwendung des <core:importdesign /> Tags. Der einzige Unterschied ist, dass eine Konfigurationssektion für den CacheManager existieren muss: Code: <core:addtaglib namespace="" prefix="cache" class="importdesign" /> <cache:importdesign namespace="my::namespace" template="my_template" /> 5. Zusammenfassung und Ausblick Dank der PageController-Implementierung des APF ist es sehr einfach, view based caching auf Basis von TagLibs zu implementieren. Um eine wiederverwendbare und in allen Bereichen einsetzbare TagLib zu erhalten, sollte die in Kapitel 3.3 abgedruckte Klasse noch um ein oder zwei weitere Attribute erweitert werden, die die Cache-Konfiguration und den Cache-Schlüssel übergeben. Das stellt sicher, dass die TagLib innerhalb der Applikation einfacher an unterschiedlichen Stellen gleichzeitig genutzt werden kann. Beim Thema Cache-Verwaltung hat der Entwickler zwei Möglichkeiten: manuelles Leeren des Caches oder der Einsatz eines Caching-Backends, das Cache-Lebenszeit unterstützt. Falls die Notwendigkeit besteht, sich selbst erneuernden Cache zu haben, so kann der CacheManager wie im Kapitel Erweiterung aufgezeigt erweitert werden. 6. Download Um das oben gezeigte Konzept lokal ausprobieren zu können, habe ich eine Beispiel-Implementierung für PHP 5 erstellt, die die in Kapitel 5 besprochenen Optimierungen bereits enthalten. Um das Beispiel lokal auszuführen, bitte die Datei view-based-caching-...-php5.zip herunterladen und im DOCUMENT_ROOT des Webservers entpacken. Bitte beachten Sie dabei, dass der Benutzer, unter dem der Webserver ausgeführt wird, Schreibrechte auf das aktuelle Verzeichnis besitzt. Falls ein anderer Ordner als Cache-Basis-Ordner verwendet werden soll, einfach die Datei /apps/config/tools/cache/sites/vbc/DEFAULT_cacheconfig.ini anpassen. Geändert von Jann Hendrik (19.12.2008 um 12:25 Uhr) |
| |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [PHP] Simples Caching System mittels Dateien | Chr!s | Tutorials | 5 | 04.11.2006 23:55 |
| Caching, Ladezeiten, Blogeinträge und Artikel | Ben | Literatur | 1 | 02.11.2006 10:04 |
| [PHP] Wiederverwendung von Berechnungen, effektives Caching | Ben | Tutorials | 4 | 27.07.2006 19:55 |
| Caching mittels dbm-Dateien, Probleme mit dba_popen() | Ben | PHP-Programmierung | 4 | 27.07.2006 13:23 |
| MVC - Was darf die View | NewYork | Anwendungsdesign / Softwarearchitektur | 2 | 03.11.2005 21:42 |