Caching von Ausgaben mit welcher Technik

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

  • Caching von Ausgaben mit welcher Technik

    Moin,

    ich möchte gerne meine ausgaben aus Datenbank etc. cachen, so dass ich Daten, welche sich nicht oft ändern, nicht permanent abrufen muss.

    Habe derzeit Smarty im test, jedoch wollte ich mal wissen, was mir noch so für Methoden geboten werden? Hab schon öfters was von XML in Verbindung von Caching gehört, kann mir aber nicht viel darunter vorstellen.

    Wäre jedoch für einige Infos und Tipps sehr verbunden :-)

  • #2
    smarty? ist doch nur ne template engine..
    xml? kann man machen, aber ob's dann schneller wird..
    warum besteht denn bedarf? würde mich aus purer neugier interessieren - um welche art von daten (und projekt generell) geht's und wie hoch ist die anforderung (besucher/anfragen pro zeiteinheit)?

    es gibt verschiedene produkte, wie z.b. von zend oder mmcache, oder aber auch recht einfache lösungen wie "phpcache" (oder so), die im grunde einfach nur die ausgabe aller dynamischen seiten statisch ablegt, sodass jeder aufruf nichts außer dem dateisystem beansprucht.

    sowohl mysql, als auch andere datenbanken (postgresql, oracle, mssql) haben eingebaute mechanismen zu diesem zweck - musst mal nachschauen.

    aber caching ist sinnlos, wenn die anwendung an sich nicht optimiert ist, sodass ich dem zweiteren eine höhere priorität zuschreiben würde, als dem cache.

    edit: es gibt noch soetwas wie mod_proxy und mod_file_cache.
    Zuletzt geändert von penizillin; 14.06.2005, 00:15.

    Kommentar


    • #3
      Danke für die Antwort, war gestern schon was spät, daher auch der knappe Texte Werde nun mal etwas weiter ausholen:

      Also ich bastel gerade an einem simplen Shop, der später auch noch möglichkeit mehrere Sprachen verwalten können soll. Nun gibt es einige Stelle im Shop, die sich nie sehr groß ändern werden - wie z.B. das Menü über die Kategorien. Diese werden jedoch auch in der Datenbank gespeichert.

      Nun habe ich mir mal z.B. Smarty folgendes überlegt: Ich habe mein Template für dieses "Kategoriensplitter" und dieses Template wird einmal mit Daten gefüllt und dann in den Cache gelegt. Erst wenn der Admin wieder etwas an diesen Daten ändern, wird der Cache neu geschrieben.

      So spare ich mir z.B. bei jeder Seite, dass komplette Menü zu aus der Datenbank zu ziehen und die Daten zu fetchen. Ist halt schon alles im Cache.

      Die strikte Trennung von Code und HTML, welche Smarty mir noch bietet, ist ein kleiner positiver Nebenpunkt

      Nur bin ich gestern an ein Problem gestoßen. Wenn der Admin die den Cache durch seine Änderungen neu schreibt, und der Benutzer Sessions über Cookies verbietet, könnte ich Probleme mit der Trans_Id kriegen. Ich bin mir nicht sicher, ob PHP selbst bei so einem gecachten Template nochmal drangeht und alle Links mit der Trans_ID verseht.

      Das der Code noch weiterhin optimiert werden muss, dass ist mir klar und daran arbeite ich auch schon direkt beim Aufbau - derzeit existiert noch nicht mehr als ein paar SQL-Statements und eine grobe Vorstellung vom Endprodukt.

      Wollte mich erstmal über sowas wie das cachen erkundigen, bevor ich das Endprodukt plane.

      Was ich eigentlich nun suche ist:
      - Die Möglichkeit oft wiederholende und gleichbleibende Daten irgendwie statisch abzulegen, damit der Server nicht mehr soviel ackern muss
      - eine klare Trennung von HTML und Code ermöglicht
      - das System nicht ausbremst

      So, nun mal die ausführliche Version

      Kommentar


      • #4
        Gecachtes Template? Da leite ich ab, dass du die Rohdaten aus der DB nimmst, daraus ein Template baust, dieses dann cachst und bei Anfragen von Smarty mit Inhalt füllen läßt. Richtig?
        Was Trans-SID betrifft, sollte das keine Probleme machen. Smarty ist auch nur PHP und ich meine mich erinnern zu können, das PHP nach Ablauf aller Scripte die Ausgabe durchgeht und an alle relativen (!) URLs die SID anhängt. Solange die gecachte Seite also nicht direkt vom Webserver ausgeliefert wird sondern vorher nochmal von PHP durchgenudelt, müßte es gehen. Probier's halt mal aus.

        Allgemein solltest du vielleicht erstmal einen Stresstest machen, um zu prüfen, ob Cacheing überhaupt notwendig ist, wieviel dir Browsercaches abnehmen können usw.

        Kommentar


        • #5
          Du hast mit der Smarty funktion insert die Möglichkeit bestimmte Bereiche - in einer gecacheten Seite - nicht zu cachen.
          Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes
          PHP Sicherheit
          PHPUnit[1-2]
          Professionelle Softwareentwicklung mit PHP 5
          Professionelle PHP 5-Programmierung

          Kommentar


          • #6
            Ich würd das denke ich auch erstmal mit dem browsercache
            versuchen. In einer der letzten Ausgabe des PHP Magazins
            war da ein guter Artikel drüber :

            hier lang...

            Alternativ würde ich auch mal bei Pear vorbeischauen, da gibt es
            auch das eine oder andere Package zu dieser Thematik.

            Kommentar


            • #7
              Original geschrieben von onemorenerd
              Gecachtes Template? Da leite ich ab, dass du die Rohdaten aus der DB nimmst, daraus ein Template baust, dieses dann cachst und bei Anfragen von Smarty mit Inhalt füllen läßt. Richtig?
              Ich habe eine PHP Seite wo mehrere templatesplitter mit display dargestellt werden - je nach Templatesplitter mit ner unterschiedlichen Cachezeit

              Also folgendes:

              1. PHP holt die Menüpunkte aus der Datenbank
              2. Stellt diese Punkte durch ein vorhandenes Template da
              3. Diese fertiger HTML Splitter (nicht die komplette Seite) wird gecacht!
              4. Bei jedem Aufruf werden die anderen Teile dynamisch generiert, nur dieser Teil des Menüs nicht. Dieser wird aus dem Cache geholt.

              Dadurch muss nur das Menü nicht ständig auf jeder Seite aus der Datenbank geholt werden.

              Das mit den Trans-IDs habe ich schon probiert, jedoch reagiert PHP nicht darauf, wenn ich mit ini_set etwas umstellen will, um dies zu simulieren

              Kommentar


              • #8
                Dadurch muss nur das Menü nicht ständig auf jeder Seite aus der Datenbank geholt werden.
                na dann ist doch wunderbar. beachte, dass die punkte 1-3 nur aufgerufen werden müssen, wenn sich was an dem menü ändert, als beim verwalten.

                ini_set() funktioniert nicht mit allen direktiven. aber das steht alles im manual.

                wenn du sowas machst, wie:

                cache_menu.php:
                Code:
                <a href="home.php">home</a> [...]
                und die seite dann inkludierst:

                home.php:
                PHP-Code:
                session_start();
                include(
                'cache_menu.php'); 
                und dein browser akzeptiert keine cookies, dann muss in der ausgabe stehen:
                Code:
                <a href="home.php?PHPSID=[HIER_DIE_SID]">home</a> [...]

                Kommentar


                • #9
                  Original geschrieben von penizillin
                  na dann ist doch wunderbar. beachte, dass die punkte 1-3 nur aufgerufen werden müssen, wenn sich was an dem menü ändert, als beim verwalten.

                  ini_set() funktioniert nicht mit allen direktiven. aber das steht alles im manual.

                  wenn du sowas machst, wie:

                  cache_menu.php:
                  Code:
                  <a href="home.php">home</a> [...]
                  und die seite dann inkludierst:

                  home.php:
                  PHP-Code:
                  session_start();
                  include(
                  'cache_menu.php'); 
                  und dein browser akzeptiert keine cookies, dann muss in der ausgabe stehen:
                  Code:
                  <a href="home.php?PHPSID=[HIER_DIE_SID]">home</a> [...]
                  Problem ist jedoch, dass selbst wenn ich es in der php.ini und php.ini für den safemode änder und danach den apache neustarte, gibt es keine Änderungen - so kann ich es nichtmals großartig testen.

                  Habe hier local den apache+php von apachefriends drauf

                  Kommentar


                  • #10
                    Original geschrieben von Heavensdoor
                    selbst wenn ich es in der php.ini und php.ini für den safemode änder
                    wieso denn jetzt der safe-mode - ich dachte du wolltest session-optionen verstellen?

                    und btw: php.ini und php.ini - wie viele von den lustigen dingern hast du denn? sicher, dass du an der richtigen rumschraubst? (mal mit phpinfo() kontrollieren, wo die benutzte php.ini liegt.)
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      hehe,

                      insgesamt habe ich 5 php.ini merke ich. Apachefriends liefert einmal eine php.ini für PHP4, dann nochmal diese nur für Einstellungen im Safemode. Dazu kommen nochmal 2 php.ini für PHP5 und eine php.ini im Apache Verzeichnis (welche ich bislang nie gefunden habe *hust*).

                      Habs eben nun getestet und er hängt automatisch die Trans-ID hintendran, auch wenn es gecacht ist. Juhu und danke euch allen

                      Kommentar

                      Lädt...
                      X