Chris: Optimierung für große Nutzerzahlen

Hallo ihr,

da für eine Seite Radiowerbung geplant ist, möchte ich vorher sicherstellen, dass mir der Server - ein gemieteter Rootserver bei 1&1 - nicht in die Knie geht.

Daher bin ich grad dabei, die Seite zu optimieren, und ich konnte hier aus dem Forum einiges mitnehmen: Caching, Caching, Caching, ... kürzlich hab ich hier vom eAccelerator gelesen, den verwende ich jetzt auch...

Aber: Es ist doch völlig unnötig, Zahlen wie zuletzt am häufigsten aufgerufene Artikel, oder aktuelle Besucher, bei jedem Seitenaufruf neu zu erfassen, oder nicht? Daher dachte ich, ich mache das unabhängig von den Seitenaufrufen und richte einen Cronjob dafür ein, der kann dann alle 10 Minuten oder so die Inhalte aktualisieren.

Nur meine Frage: Wo soll das Cronjob-Script am besten seine Ergebnisse hinspeichern, damit meine Startseite nicht extra eine Datenbank-Verbindung dafür aufnehmen muss? Ist eine Textdatei ressourcenschonend? Oder soll ich mit dem Script vielleicht direkt eine statische HTML-Seite aktualisieren lassen? Dann bräuchte für den ersten Aufruf der Seite überhaupt kein PHP-Interpreter anlaufen, was sicher auch schonend wirkt...

Was meint ihr?

Gruß
Chris

  1. Hi!

    Ist eine Textdatei ressourcenschonend? Oder soll ich mit dem Script vielleicht direkt eine statische HTML-Seite aktualisieren lassen?

    Worin genau siehst Du den Unterschied zwischen der Aktualiserung einer "Textdatei" und einer "statischen HTML-Seite"?

    off:PP

    --
    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
    1. Worin genau siehst Du den Unterschied zwischen der Aktualiserung einer "Textdatei" und einer "statischen HTML-Seite"?

      Ganz einfach: Speichere ich es in eine statische HTML-Seite, braucht die Seite überhaupt nicht mehr geparst werden. Speichere ich es in eine einfache Textdatei, muss ich mittels PHP noch die Textdatei einlesen und zusammen mit dem übrigen HTML-Text ausgeben lassen.

      In ersterem Fall bräuchte ich PHP gar nicht. Wär doch, zumindest für die Startseite, besser oder?

      Gruß
      Chris

  2. hi,

    Caching, Caching, Caching, ... kürzlich hab ich hier vom eAccelerator gelesen, den verwende ich jetzt auch...

    Nimm das Management für Last-Modified selbst in die Hand und teste es. Das ist das älteste und auch das beste Cache-Verfahren. Damit sparst Du Traffic.

    CGIs: wenn möglich nutze FastCGI, weil: der meiste Overhead entsteht beim _Starten_ eines CGIs. Damit sparst Du Rechenleistung.

    MySQL: der Server sollte auf dergleichen Maschine laufen wie der Webserver. Damit hast Du Performance. MySQL-Anbindung als FastCGI ist "muss".

    Hotte

    1. Hi,

      Nimm das Management für Last-Modified selbst in die Hand und teste es. Das ist das älteste und auch das beste Cache-Verfahren.

      Wenn es aber die Möglichkeit gibt, es in den Händen des Webserver selbst zu belassen - dann nimmt man es nicht in die eigenen.

      MfG ChrisB

      --
      Light travels faster than sound - that's why most people appear bright until you hear them speak.
      1. Hi,

        Nimm das Management für Last-Modified selbst in die Hand und teste es. Das ist das älteste und auch das beste Cache-Verfahren.

        Wenn es aber die Möglichkeit gibt, es in den Händen des Webserver selbst zu belassen - dann nimmt man es nicht in die eigenen.

        Schon richtig, lieber Chris, in die Hände nehmen, heißt aber auch: Kontrollieren (das meine ich).

        Viele Grüße,
        Hotte

        --
        Mich Ekel stechen keine Mücken. Es sei denn, die sind pervers ;-)
    2. Guten Tag,

      CGIs: wenn möglich nutze FastCGI, weil: der meiste Overhead entsteht beim _Starten_ eines CGIs. Damit sparst Du Rechenleistung.

      Und wenn man schon soweit ist: Apache auf Worker-MPM umstellen, mysqlnd verwenden, ggf. CDN mit AWS machen.

      Gruß
      Christoph Jeschke

      --
      Zend Certified Engineer
      Certified Urchin Admin
      Selfcode: sh:( fo:) ch:? rl:? br:& n4:( ie:( mo:) va:} de:] zu:$ fl:( ss:} ls:& ja:|
      1. Guten Tag,

        CGIs: wenn möglich nutze FastCGI, weil: der meiste Overhead entsteht beim _Starten_ eines CGIs. Damit sparst Du Rechenleistung.

        Und wenn man schon soweit ist: Apache auf Worker-MPM umstellen, mysqlnd verwenden, ggf. CDN mit AWS machen.

        Und wenn Du mal ein bischen mehr Zeit hast, kannst Du ja mal die Abkürzungen alle erklären ;-)

        Viele Grüße,
        Horst Haselhun

        Pahh, neulich hat einer nach RAM-Zeugs gesucht und ist auf meiner DDR-Seite gelandet :-)

  3. Sieh dir die Zend_Cache-Klassen aus dem Zend Framework an.
    Damit ist es sehr einfach, bestimmte Teile deiner Seite (am besten die mit den komplexesten Abfragen) zu cachen.
    Über das Backend kannst du einfach die Art, wie bzw. wohin der Cache-Inhalt gespeichert wird, bestimmen - zur Auswahl stehen verschiedene Möglichkeiten, zB Files, SQLite, Memcached (sehr schnell) usw.
    Das Frontend bestimmt Inhalt und Lebensdauer des Caches - mit Zend_Cache_Frontend_Page kannst du zB ganze Seiten, mit Zend_Cache_Frontend_Output teile deiner Seite zwischenspeichern, mit Zend_Cache_Frontend_Core das Ergebnis einer Datenbankabfrage, etc.
    Wenn du zB den Besucherzähler cachen willst, sieht das in etwa so aus:

      
    $frontendOptions = array(  
       'lifetime' => 600, // Lebensdauer des Caches 10 Minteun  
       'automatic_serialization' => false  
    );  
      
    $backendOptions = array(  
        'cache_dir' => './tmp/' // Verzeichnis, in welches die Cache Dateien kommen  
    );  
      
    // Ein Zend_Cache_Output Objekt erzeugen  
    $cache = Zend_Cache::factory('Output',  
                                 'File',  
                                 $frontendOptions,  
                                 $backendOptions);  
    // Wir übergeben eine eindeutige Identifizierung an die start() Methode  
    if(!$cache->start('visitors')) {  
        //Abfragen der Besucherzahlen und anschließende Ausgabe  
        $cache->end(); // Die Ausgabe wird gespeichert und zum Browser gesendet  
    }