"We are back" « oc.at

html, php und mysql

Duron 11.09.2002 - 09:06 1603 24
Posts

BuSHidO

ist süß
Registered: Jul 2001
Location: galaxie
Posts: 542
tjo deshalb sind auch leute mit erfahrung mehr gefragt ;)

Philipp

Here to stay
Registered: Jul 2001
Location: Wien
Posts: 1970
Ganz brauchbar für Einsteiger ist das Buch "PHP4: Grundlagen und Profiwissen" von Jörg Krause. In diesen Buch steht zwar nicht alles drinnen (PHP entwickelt sich ziemlich rasch weiter) aber fürs erste ist es ein guter Anfang :)

Zum Thema Performanceoptimierungen:
Man lernt mit den Jahren dazu. Ein Tutorial das erklärt wie man PHP/MySQL basierende Seiten optimiert habe ich bisher noch nicht gesehen.

Zwei Tipps:
1) Persistente Verbindungen zur MySQL Datenbank bringen nichts. Im Gegenteil der Speicherverbrauch am Server steigt dramatisch an.

2) DB Seiten wenn möglich in Textdateien cachen um sie beim zweiten Aufruf ohne Datenbankzugriff aufzubauen.

BuSHidO

ist süß
Registered: Jul 2001
Location: galaxie
Posts: 542
juhu lass ma die disken rauchen =)

Philipp

Here to stay
Registered: Jul 2001
Location: Wien
Posts: 1970
Zitat von BuSHidO
juhu lass ma die disken rauchen =)
:confused:

Falls das eine Anspielung auf das Caching ist. Wo glaubst du werden die MySQL Datenbanken gespeichert?

Eine Gecachte Seite kann wesentlich effektiver sein als jedes Mal eine neue Datenbankanfrage zu starten. Jede Verbindung zur Datenbank kostet Speicher und CPU Zeit.

Bestes Beispiel das Caching sehr viel bringt ist http://www.majorgeeks.com

MajorGeeks ist der Hauptmirror von ManOnion bzw. LavaSoft (Ad-Aware) und hat relativ viele Zugriffe. Der Serverload am MajorGeeks Server ist derzeit aber nur: 0.25, 0.28, 0.26 wobei 5 Websites auf den Server gehostet sind.

Würde man jetzt PHP-Nuke Installieren bin ich sicher das der Serverload locker auf 5.00-10.00 ansteigt ;)

flaimo

ILFTKYS
Avatar
Registered: Dec 2001
Location: ask a ninja
Posts: 872
Zitat von Philipp
2) DB Seiten wenn möglich in Textdateien cachen um sie beim zweiten Aufruf ohne Datenbankzugriff aufzubauen.

wo gibts'n a paar gute caching tutorials? weil mit DB last verringern und caching hab i mi nu nie beschäftigt. bin gerade dabei mein kleines cms in OOP umzusetzen und smarty zu integrieren, obwohl i festgestellt habe, dass letzteres eh fast hinfällig ist, wenn ma gscheite klassen baut, da dann die eigentliche php datei eh quasi nur mehr ein template ist.

Philipp

Here to stay
Registered: Jul 2001
Location: Wien
Posts: 1970
Zitat von flaimo
wo gibts'n a paar gute caching tutorials?

Leider nein. Die ursprüngliche Idee habe ich mir aus Infopop's Ultimate Bulletin Board ausgeborgt ;)

Dennoch hier ein simples Caching Script das dir helfen sollte:
Code: PHP
<?php

// Seite gecacht? 
if (file_exists("gecachte_seite.inc.php")) {
	include("gecachte_seite.inc.php");
} else {

ob_start(); 

// Hier beginnt die Seite die gecacht werden soll

echo "Das ist ganz normaler Text der über echo ausgegeben wird";

// Ende der Seite

$seite = ob_get_contents(); 
ob_end_clean(); 

$datei = fopen("gecachte_seite.inc.php",w);
	fputs($datei,"$seite");
fclose ($datei);

echo $seite;
}

?>

Im ersten Teil schaut das Script ob die Datei "gecachte_seite.inc.php" existiert und inkludiert sie ggf. Falls nicht geht es weiter mit dem zweiten Teil.

Mit ob_start(); wird die Buffering Funktion aktiviert. Dadurch wird alles in einen Buffer zwischengespeichert statt es gleich am Bildschirm auszugeben.

$seite = ob_get_contents(); übergibt den Inhalt des Buffer der Variable $seite. Die gecachte Seite ($seite) wird jetzt in die Datei "gecachte_seite.inc.php" geschrieben.

Beim nächsten Aufruf findet das Script "gecachte_seite.inc.php" und inkludiert sie.

Im mittleren Teil des Script kann jedes beliebige PHP Script eingebaut werden :)

flaimo

ILFTKYS
Avatar
Registered: Dec 2001
Location: ask a ninja
Posts: 872
ok, das prinzip leuchtet mir ein, obwohl man das wohl noch erweitern muss, weil man ja angeben sollte wie lang eine seite gecached werden sollte und ob sich inhaltnlich was geändert hat.

und wie schaut das aus mit DB abstract layers? ich hab im moment meinen eigenen kleinen geschrieben, der nix anderes macht als mysql funktionen auszuführen. in quasi jeder anderen klasse erzeuge ich davon ein objekt ($this->db->fetch_row($sql) ... usw) und hold mir die daten. ich hab aber so ein dumpfes gefühl dass das auch nicht sehr performant ist.

Philipp

Here to stay
Registered: Jul 2001
Location: Wien
Posts: 1970
Zitat von flaimo
ok, das prinzip leuchtet mir ein, obwohl man das wohl noch erweitern muss, weil man ja angeben sollte wie lang eine seite gecached werden sollte und ob sich inhaltnlich was geändert hat.

In dem Script das in die Datenbank schreibt baut man z.B. ein unlink("gecachte_seite.inc.php"); damit die gecachte Seite bei jeder Datenbankänderung gelöscht wird :)

Zitat
ich hab aber so ein dumpfes gefühl dass das auch nicht sehr performant ist.

Kommt auf die Programmierung an, es wird aber nicht sonderlich Auffallen. Das einzige was wirklich wichtig ist: Man sollte sowenig SQL Anfragen wie möglich an die Datenbank stellen.

flaimo

ILFTKYS
Avatar
Registered: Dec 2001
Location: ask a ninja
Posts: 872
Zitat von Philipp
Man sollte sowenig SQL Anfragen wie möglich an die Datenbank stellen.



wenn man wirklich oop durchgehend verwendet, dann ist das wohl der kompromiss den man schließen muss, dass man viel mehr verbindungen hat. vorher habe ich eine abfrage für eine liste 10 von umfragen gehabt und jetzt halt sind es 11 anfragen. jeweils eine für das objekt "umfrage" und eine für das ermitteln der liste im objekt "umfrageliste".

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
wobei das mit geschicktem includen von extending-functions vielleicht sogar verringert werden kann... ;)


ähm, dazu fällt mir noch ein: gibts in php eigentlich sowas wie benutzerdefinierte umgebungsvariablen?
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz