Zend Framework Forum Right Header

Zurück   Zend Framework Forum > Zend Framework Komponenten > Core

Antwort
 
Themen-Optionen Ansicht
Alt 16.07.2009, 11:32   #1
robo47
 
Benutzerbild von robo47
 
robo47 eine Nachricht über Skype™ schicken
Standard Caching-Ideen / Ansätze für Zend_Navigation

Ich bastel aktuell mal wieder an meiner eigenen Seite bißchen blog und so und musste jetzt einfach feststellen, dass Zend_Navigation wenn man es für die Sitemap oder Breadcrumb benutzt in der Praxis extrem viel Speicher frisst. Die aktuellen Testdaten sind ca 200 Artikel in Form von Texten, Blogeinträgen und Codeschnipseln und ca 400 Tags, was da jeder Tag ja auch über eine Seite gelistet wird zu einer ~ 600 großen Zend_Navigation führt. Und das ist der Start-Stand, das wird ja sobald ich das ganze betreibe noch mehr.

Das Objekt cache ich natürlich (apc), weil das jedes mal zum erstellen inklusive Datenbankabrufen etc zu lange dauern würde, aber das Objekt ist halt jetzt schon sehr groß, in apc serialisiert belegt es ~ 540kb, sobald ich es aus dem Cache Hole braucht der PHP-Prozess dafür 3,5 MB mehr Speicher. ~ 600 KB gehen dabei für die ganzen Zend_Navigation_*-Klassen die geladen werden drauf und der Rest für die Daten selbst.

Manche meiner Seiten brauchen daher aktuell schon zwischen 7 und 11 MB speicher, was ich doch etwas viel finde. Neben dem ZF kommt halt noch Doctrine zum Einsatz, was natürlich auch seinen Teil dazu beiträgt.

Um jetzt z.b. das Zend_Navigation-Objekt nicht mehr laden zu müssen hab ich angefangen in den Views selbst (unschön ich weis) Navigationen und Breadcrumbs zu cachen bzw. aus dem Cache zu holen.

z.b. so
PHP-Code:
                    <?php
                    $id 
'FrontendBreadcrumb' sha1($_SERVER['REQUEST_URI']);
                    
$cache CacheModel::getCache('system');
                    
$breadcrumb $cache->load($id);
                    if (!
$breadcrumb) {
                        
$breadcrumb = (string)$this->navigation(NavigationModel::getCompleteNavigationCached())
                                    ->
breadcrumbs()
                                    ->
setLinkLast(false)
                                    ->
setMinDepth(0)
                                    ->
setSeparator(' ?' PHP_EOL);
                         
$cache->save($breadcrumb$id);
                    }
                    echo 
$breadcrumb;
                     
?>
Das ganze werde ich wohl noch in einen View-Helper packen.

Hat vielleicht noch jemand eine bessere Idee wie man sich dem hohen Speicherverbrauch entgegenstellen kann, weil auch wenn das ganze auf nem Root-server laufen wird, so ist der doch schon etwas kleiner und älter (2200er mit 512 RAM) und neben dem Apache, mysql und co laufen dort auch noch ein Mailserver, Jabberserver, VPN und ein paar andere Dienste, da ist also schon einiges an Speicher belegt.

Der Ansatz des Cachens kompletter Seiten hab ich auch schon einfließen lassen, allerdings nur z.b. für die Tags-Seiten und die "statischeren" Seiten, weil alle anderen Seiten meist Kommentar-Formulare die auch via Cookie/Session-Daten befüllt werden sollen enthalten, aber das mit $_SESSION / $_COOKIE löst ja Zend_Cache_Frontend_Page von sich aus und nutzt dort keinen Cache.

Falls also noch jemand ne Idee hat wie man z.b. die Speicherverbrauch des Zend_Navigation-Objektes veringern kann oder wie man das mit den gecachten Navs etwas feiner löst, würde ich mich über ein paar Ideen freuen.
robo47 ist offline   Mit Zitat antworten
Alt 16.07.2009, 11:44   #2
DennisBecker
 
DennisBecker eine Nachricht über ICQ schicken
Standard

Also 7 bis 11 MB ist doch noch garnichts! Es wird ja sogar empfohlen, PHP mit 128 MB Speicher zu betreiben. Da eine Seite im Normalfall nur wenige Millisekunden durch PHP läuft, ist das doch auch kein Problem. Ich Frage mich allerdings, warum unbedingt die Tags in der Sitemap sein müssen - da muss ja nicht unbedingt jede unbedeutende Seite drin auftauchen!
__________________
Neues Projekt: zandman.de - Status: WIP
DennisBecker ist gerade online   Mit Zitat antworten
Alt 16.07.2009, 12:07   #3
robo47
 
Benutzerbild von robo47
 
robo47 eine Nachricht über Skype™ schicken
Standard

Für mich sind die 7 - 11 MB schon viel
128 MB für jeden Prozess ... schön wäre es wenn ich das an Resourcen zur Verfügung hab, aber da der ganze Server schon auch etwas älter ist bei mir das meist ein paar mehr Millisekunden die PHP braucht.

Das mit den Tags stimmt, die sollen auch nicht auf der "visuelle" Sitemap ausgegeben werden, sondern nur in der XML-Variante für Google, da könnte ich ja ein zweites Zend_Navigation-Objekt erstellen wo die tags nicht vorkommen.
robo47 ist offline   Mit Zitat antworten
Alt 16.07.2009, 12:20   #4
DennisBecker
 
DennisBecker eine Nachricht über ICQ schicken
Standard

Warum cacht du da nicht Ergebnis der Sitemap und erstellst nur eine, wenn sich da auch was ändert? Ich meine, wenn das einmalig ist, ist das eh kein Problem. Und die 128 MB werden dem PHP Prozess nicht fest zugewiesen
__________________
Neues Projekt: zandman.de - Status: WIP
DennisBecker ist gerade online   Mit Zitat antworten
Alt 17.07.2009, 23:36   #5
robo47
 
Benutzerbild von robo47
 
robo47 eine Nachricht über Skype™ schicken
Standard

Hmm stimmt, dann werde ich das wohl an der Stelle so machen.
robo47 ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge anzufügen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
zend_navigation + acl bigman007 Einsteigerfragen 2 20.05.2009 15:51
Zend_Navigation und .ini Config tattoo Einsteigerfragen 12 28.04.2009 20:21
Zend_Navigation Kaiuwe Ankündigungen 12 08.04.2009 18:21
Zend_Translate und Caching thomas Lokalisierung & Internationalisierung 2 03.12.2007 08:42
Thema Caching, APC oder Memcache oder ins Filesystem? chrigu Offtopic 17 23.02.2007 08:21


Powered by vBulletin® Version 3.6.12 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Alle Zeitangaben in WEZ +2. Es ist jetzt 12:56 Uhr.
Webdesign, CMS, Internet Anwendungen mit Zend
Framework aus Darmstadt, Frankfurt, Rhein-Main

presented by omoo

Skin Design Provided By Talk vBulletin