XML für cache einsetzen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • XML für cache einsetzen

    Hi,
    was ich jetzt poste könnte zwar auch unter Brainstorming laufen, aber ich poste es lieber hier.

    Und zwar hab ich für mein CMS, welches ich zu bewerbungszwecken schreibe, eine Möglichkeit gesucht, Daten vernünftig zu cachen. Dabei hatte ich die Idee, Daten, die öfter abgerufen werden (meistens erste Seite von z.B. news oder blogeinträgen; navigation) in einer XML-Datei zwischenzuspeichern. Zum ausgeben des Inhalts benutze ich die DOMDocument() Klasse von PHP zusammen mit einem eigenen Template-system. Falls die jeweilige cache-datei nicht existiert wird sie angelegt, wenn die Datei grade gelockt ist, wird auf die MySQL-Datenbank zurückgegriffen. Meiner Meinung nach ist das ein guter Mittelweg zwischen dem kompletten cachen einer Seite und gar keinem caching.

    Meine Fragen:
    -Was haltet ihr von der Idee?
    -Wie schnell ist die Klasse DOMDocument()?
    -Gibts sowas schon? Bin erst seit 2 Wochen wieder aktiv am PHP schreiben

    Ich hoffe meine Theorie ist verständlich
    got gentoo?

  • #2
    Re: XML für cache einsetzen

    EDIT:
    auf "quote" anstatt "edit" geklickt und zu spät gemerkt :/
    Zuletzt geändert von RockingRolli; 12.06.2006, 03:54.
    got gentoo?

    Kommentar


    • #3
      Die DOM-Extension parst im Grunde alles in eine Objektstruktur. Das heißt deine XML-Dateien werden für jeden Request erneut komplett verarbeitet, obwohl solange wie der Cache nicht veraltet ist, immer die gleiche Ausgabe herauskommt. Das ist sicher alles andere als optimal.

      Normalerweise erzeugt man die Ausgabe, wie sie an den Client geht, speichert sie und liefert sie bei jedem Request wieder aus, bis sie veraltet.

      Kommentar


      • #4
        Re: XML für cache einsetzen

        Original geschrieben von RockingRolli
        was ich jetzt poste könnte zwar auch unter Brainstorming laufen, aber ich poste es lieber hier.
        Und ich verschiebe es lieber doch ...
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          http://www.squid-cache.org/

          Kommentar


          • #6
            Original geschrieben von axo
            http://www.squid-cache.org/
            vollkommen am topic vorbei ~_~

            Hier geht es um php-seitiges Caching und du gibst einen Link zu einem Proxy

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              vollkommen am topic vorbei ~_~

              Hier geht es um php-seitiges Caching und du gibst einen Link zu einem Proxy
              immer erst nachdenken, dann schreiben. vielleicht war das ja ein hinweis, dass php-seitiges caching nicht immer (ich wage sogar zu behaupten, meist) keinen sinn macht, weil es einfachere und gleichzeitig performantere methoden des caching gibt.
              muss man euch denn alles aus der nase ziehen?

              grüße
              axo

              Kommentar


              • #8
                Das mit Squid sieht sehr Interessant aus... da kann man sicher was gutes draus machen. Wenn das CMS allerdings auf nem normalen, gemieteten Webspace laufen soll ist das caching damit schlecht umzusetzen.
                got gentoo?

                Kommentar


                • #9
                  Original geschrieben von RockingRolli
                  Wenn das CMS allerdings auf nem normalen, gemieteten Webspace laufen soll ist das caching damit schlecht umzusetzen.
                  das ist wahr. du kannst dir davon aber trotzdem erstmal merken, wie man caching am besten implementiert, nämlich als Proxy. d.h. die grundstruktur ist immer so:

                  PHP-Code:
                  interface Foo {
                     function 
                  getBar();
                     function 
                  getBaz();
                  }

                  class 
                  FooImpl implements Foo {
                     function 
                  getBar() {
                       
                  // return irgendwas kompliziertes
                     
                  }
                     function 
                  getBaz() {
                         
                  // dito
                    
                  }
                  }

                  class 
                  FooProxy implements Foo {
                     function 
                  __construct(Foo $f) {
                          
                  $this -> _obj $f;
                     }
                    
                  /** 
                     * könnte man mit __get() und __set() machen,
                     * ich stehe aber auf explizite interfaces.
                    */
                    
                  function doGet($method) {
                          if (
                  array_key_exists($method$this -> _cache)) {
                             return 
                  $this -> _cache[$method];
                         }
                         
                  $this -> _cache[$method] = call_user_func($this -> _obj$method);
                         return 
                  $this -> _cache[$method];
                    }
                    function 
                  getBar() {
                             return 
                  $this -> doGet('getBar');
                    }
                    function 
                  getBaz() {
                           return 
                  $this -> doGet('getBaz');
                    }

                  was ich damit sagen will ist: das caching wird immer so implementiert, dass bei einem 'cache hit' das ergebnis sofort und ohne weitere verrenkungen ausgegeben werden kann. xml ist dafür ungeeignet, denn mit xml müsstest du jedes mal das cache ebenfalls weiterverarbeiten - wo ist da der sinn dahinter? oder willst du dann ein CacheCache programmieren, das die verarbeiteten xml-ergebnisse dann zwischenspeichert? oder ein CacheCacheCache ?

                  und das schöne am proxy-pattern ist:
                  du kannst mithilfe von objektkomposition den proxy zu- und wegschalten, wann immer du willst.

                  grüße
                  axo
                  Zuletzt geändert von axo; 14.06.2006, 10:59.

                  Kommentar


                  • #10
                    Original geschrieben von axo
                    was ich damit sagen will ist: das caching wird immer so implementiert, dass bei einem 'cache hit' das ergebnis sofort und ohne weitere verrenkungen ausgegeben werden kann. xml ist dafür ungeeignet, denn mit xml müsstest du jedes mal das cache ebenfalls weiterverarbeiten - wo ist da der sinn dahinter?
                    Schön strukturierter Cache und die Datenbankabfragen kann man sich klemmen?
                    Wenn man verschiedene Ausgabemedien benutzt (z.B: HTML und RSS-Feed), könnte das interessant sein (muss zwar nicht, aber könnte)


                    Original geschrieben von axo
                    immer erst nachdenken, dann schreiben. vielleicht war das ja ein hinweis, dass php-seitiges caching nicht immer (ich wage sogar zu behaupten, meist) keinen sinn macht, weil es einfachere und gleichzeitig performantere methoden des caching gibt.
                    muss man euch denn alles aus der nase ziehen?
                    So ein Quark ... wenn der apache vernünftig und ohne overhead kompiliert ist, kann man sich den Squid sparen, nein im Gegenteil sogar, wenn jeder User durch php-Parsung eine andere Website kriegt, kann der Squid sogar hinderlich sein, weil er dann eventuell gecachte Seiten ausliefert, die gar nicht für den User bestimmt sind. Spart zwar dann Performance, macht aber die Site kaputt
                    Dahingegen hat man mit php volle Kontrolle über jedes Byte was man ausgibt.

                    Squid macht nur Sinn, wenn man Seiten komplett Cachen kann, das ist aber bei php-Skripten mit Login eher selten der Fall, um nicht zu sagen "fast nie". Für statische HTML-Seiten mag das anders aussehen...

                    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                    Wie man Fragen richtig stellt

                    Kommentar

                    Lädt...
                    X