Zur Boardunity Forenstartseite
  #1  
Alt 31.03.2004, 20:03
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.639

Caching, wie realisiert?


Hi,

nehmen wir eine Forensoftware. Wie wird da das Caching realisiert und was versteht man darunter genau?

Beim vB3 finde ich z.B. cache_templates(); oder cache_permissions();

Am liebsten wäre mir ne kurze Erklärung von euch und ein Link zu einer ausführlichen Beschreibung
  #2  
Alt 31.03.2004, 20:20
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.639
Meine Frage war für mich sehr deutlich:

Wie wird da das Caching realisiert und was versteht man darunter genau?

Es soll ja sicherlich nicht bedeuten, dass häufig verwendetes in eine txt-Datei gelagert wird

  #3  
Alt 31.03.2004, 20:21
Mitglied
 
Registriert seit: 10.2003
Ort: Bottrop
Beiträge: 779
Templates hatten wir hier vor kurzem:
http://www.boardunity.de/showthread.php?t=1463
Das compilierte Template wird als *.php gespeichert und dann eingebunden. Wie kommt auf deine Template-Klasse ein. Denkbar wäre z.B. ein einfaches include.

Das vorparsen von Beiträgen finde ich persönlich nicht so gut. Ist sehr umständlich, wenn man öfter mal einen neuen BBCode hinzufügt, oder entfernt oder ändert.

__________________
Patrick Gotthardt
Patrick Gotthardt on Software
  #4  
Alt 31.03.2004, 22:54
Benutzerbild von naggeldak
Hendi
 
Registriert seit: 01.2004
Ort: Rösrath
Beiträge: 54
Mal kurz und knapp, ich hoffe aber trotzdem einigermaßen verständlich (das folgende bezieht sich auf mein nBB, lässt sich aber bestimmt auch auf andere Forensystem übertragen):

Caching bei Templates:
In Templates stehen Dinge wie:
Code:
{if logged_in()}
    Hallo {$this_user['name']}
  {else}
    Hallo Gast
  {/if}
Dies wandelt der Parser um in:
PHP-Code:
if (logged_in()) {
    echo 
'Hallo '.$this_user['name'];
  } else {
    echo 
'Hallo Gast';
  } 
Templates wie thread_postbit (die in einem Thema dargestellten Beiträge) werden auf einer Seite mehrmals ausgegeben. Damit der Parser nicht jedes mal den nBB-Template-Code in php-Code umwandeln muss, wird der einmal erstellte php-Code in einer Variable zwischengespeichert und steht wird bei allen folgenden Aufrufen schon "kompilliert" zur Verfügung.
Alternativ ist es auch möglich, die Templates einmalig zu php-Code zu kompillieren und in eine Datei zu schreiben, sodass die Templates bei keinem Seitenaufruf kompilliert werden müssen.

Caching von Benutzerrechten:
Beim Aufrufen eines Themas wird vieles überprüft:

  • Hat der Benutzer Rechte, das Board zu betreten?
  • Hat die Gruppe des Benutzers Rechte, das Board zu betreten?
  • Hat der Benutzer Rechte, das Forum zu betreten?
  • Hat die Gruppe des Benutzers Rechte, das Forum zu betreten?
  • Hat der Benutzer Rechte, das Thema zu öffnen?
  • Hat die Gruppe des Benutzers Rechte, das Thema zu öffnen?
Damit nun nicht jedes mal eine Datenbankabfrage ausgeführt wird (in diesem Fall sechs Stück), wird zu Beginn jedes Aufrufs alles in ein Array gespeichert (folgende Darstellung ist lediglich exemplarisch):
PHP-Code:
$this_user = array(
    
'can_see_board' => true,
    
'can_see_forum' => array(
      
=> true,
      
=> true,
      
=> false
    
),
  ); 
Diese Variable wird nun für alle folgenden Überprüfungen von Benutzerrechten benutzt.

Caching bei Smilies und BB-Codes:
Ein Thema besteht aus mehreren Beiträgen, und jeder Beitrag muss auf Smilies und BB-Codes überprüft und ggf. umgewandelt werden. Damit nun nicht für jeden Beitrag zwei Datenbankabfragen ausgeführt werden müssen, geschieht dies nur beim ersten Beitrag. Dort werden Smilies und BB-Codes ausgelesen und in einem Array zwischengespeichert. Bei allen weiteren Beiträgen werden nun nicht mehr die Smilies und die BB-Codes aus der Datenbank gelesen, sondern die Werte aus dem Array genommen, was bei 20 Beiträgen (20-1)*2 = 38 Datenbankabfragen spart.

Ich hoffe, dass das so verständlich war, für nähere Details einfach in den Quellcode gucken. Ich denke aber, dass das hier schonmal ein guter Einblick in verschiedene Arten des Cachings war.

__________________
Hendrik Richter
php-Programmierung | Hendis Blog | lolomat | Gratis Downloads
  #5  
Alt 31.03.2004, 23:00
Benutzerbild von MrNase
Mitglied
 
Registriert seit: 06.2003
Ort: /
Beiträge: 2.639
Hey Hendrik,

danke, auf so eine Antwort hatte ich gewartet
Trotzdem nehme ich dein Angebot gerne an und schaue mir den Quelltext deines Forums an. Da kann ich sicherlich noch was lernen

grüße,

  #6  
Alt 01.04.2004, 02:24
Benutzerbild von Björn
Boardunity Team
 
Registriert seit: 10.2003
Ort: Rhode
Beiträge: 1.205
Zitat:
Ein Thema besteht aus mehreren Beiträgen, und jeder Beitrag muss auf Smilies und BB-Codes überprüft und ggf. umgewandelt werden. Damit nun nicht für jeden Beitrag zwei Datenbankabfragen ausgeführt werden müssen, geschieht dies nur beim ersten Beitrag. Dort werden Smilies und BB-Codes ausgelesen und in einem Array zwischengespeichert. Bei allen weiteren Beiträgen werden nun nicht mehr die Smilies und die BB-Codes aus der Datenbank gelesen, sondern die Werte aus dem Array genommen, was bei 20 Beiträgen (20-1)*2 = 38 Datenbankabfragen spart.
naja das ist ja nur indirekt caching..
ich würde darunter zb verstehen, dass man den search - replace teil bei den smilies und bb codes in einer datei speichert, welche sich nur ändert, wenn man die bb codes abändert. so hab ich das bei mir realisiert.
sind zwar insgesamt nur 2 querys pro thread seite aber immerhin!
mfg

__________________
Björn C. Klein
Welt-Held!
PunkRockNews.de
  #7  
Alt 01.04.2004, 11:52
Benutzerbild von TRS
TRS TRS ist offline
Mitglied
 
Registriert seit: 02.2003
Ort: Berlin
Beiträge: 995
Es gibt viele Arten von Caching. Die BBCodes können auch direkt in HTML umgewandelt und gespeichert werden. Bei Bedarf kann dieser wieder umgewandelt werden.

Eine andere Möglichkeit ist, welche nur in wenigne Fällen auf Foren zutrifft, die Speicherung des kompletten HTML Codes. Wenn eine Änderung auftritt oder wenn ein bestimmter Zeitraum abgelaufen werden, wird dann der Quelltext erneut frisch erstellt, sonst aus der Datei/Datenbank ausgelesen.

  #8  
Alt 01.04.2004, 13:15
Mitglied
 
Registriert seit: 07.2002
Beiträge: 357
Schau Dir doch mal die template-cache*.php aus dem /contrib-Ordner von phpBB 2.0.x an. Es gibt je eine Template-Klasse für das Cachen über Dateien und die Datenbank.

phpBB 2.2 geht noch einen Schritt weiter und cacht auch Dinge wie allgemeine Einstellungen, Benutzereinstellungen, Rechte, ... Schau einfach in den Source.

Off-Topic:
Ist Open Source nicht toll

  #9  
Alt 17.04.2004, 15:07
Benutzerbild von Fabchan
früher Dracaelius
 
Registriert seit: 10.2003
Ort: Seesen
Beiträge: 354
Caching innerhalb eines Seitenaufrufes wie weiter oben bereits ausführlich beschrieben, empfinde ich persönlich als selbstverstänlich. Wer bei jedem Beitrag innerhalb eines Threads jedesmal Smilies o.ä. abfragt, der hat in meinen Augen nicht allzu viel Ahnung von PHP und Co.

Ein gutes Beispiel für Caching ist auch das Tritanium Bulletin Board 1.x, welches Daten in Dateien speichert. Hier kann es in bestimmten Situationen vorkommen, dass eine Datei innerhalb eines PHP-Scripts des öfteren aufgrufen werden muss (mir fällt gerade kein Beispiel ein!). Jedes Mal, wenn der Inhalt dieser Datei ausgelesen werden müsste, prüft das Script, ob er bereits in einem assoziativem Array, welches als Schlüssel en Namen der Datei hat, gespeichert ist. nur falls dem nicht so ist, wird die Datei geladen.

Ich selbst verwenden zum Cachen von Datenbankinhalten, etc. in Dateien den PHP-Befehl serialize(). So kann ich die Daten (meisten Arrays oder Strings) exact so, wie sie in PHP waren, in Dateien cachen und kriege sie genauso wieder zurück, ohne implode(), explode() oder ähnliche Funktionen!

__________________
Fabian Michael
"Ein Tag, an dem du nicht lächelst, ist ein verlorener Tag."
- Charlie Chaplin

Wiki
  #10  
Alt 03.05.2004, 14:23
Stoiker
 
Registriert seit: 02.2004
Beiträge: 34
Cachen kann man auf sehr, sehr vielen unterschiedlichen Ebenen. Als Einstieg empfehle ich diese Präsentation von Ulf Wendel: http://caching.ulf-wendel.de/

Wichtig ist immer den Flaschenhals zu erkennen, und dort mit dem Caching anzusetzen. Und wie so oft ist es besser man misst nach (bspw. mit XDebug für php, oder mit apache bench für generelle Zugriffszeiten, usw.), anstatt dass man nach intuitiven Vermutungen an den falschen Stellen optimiert...

Antwort


Stichworte
-

Themen-Optionen
Thema bewerten
Thema bewerten:

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 hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Caching in Forensoftware's und Content Management Systemen codethief Programmierung und Datenbanken 2 21.09.2004 15:13
Caching von Index-Seiten itst Web Design und Grafik 26 20.07.2004 17:31






1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25