([EXP] =
EXPerimental! Und GENAU SO ist diese Spielerei zu verstehen)
1. "Subs.php" öffnen
2. Am Anfang des Files findet sich "$yyheaderdone = 0;" - in der Zeile danach fügt man
$onlineCache = array();
ein.
3. Die komplette Funktion "OnlineStatus" durch folgende ersetzen:
function OnlineStatus($user)
{
global $db_prefix,$onlineCache;
if (!isset($onlineCache[$user]))
{
$result = mysql_query('SELECT * FROM '.$db_prefix.'log_online WHERE identity = "'.$user.'" LIMIT 1');
$onlineCache[$user] = mysql_num_rows($result);
}
return $onlineCache[$user];
}
Vorteil:Die alte Version lief grundsätzlich die ganze log_online Tabelle durch um festzustellen ob ein User online ist. angenommen es waren 100 User gleichzeitig im Board hiess das: bis zu 99 unnötige Zugriffe auf die Tabelle.
Die neue Funktion greift nur einmal zu, sollte also schneller sein.
Ausserdem wird über das Array $onlineCache geregelt, dass eine Abfrage pro Scriptaufruf auch nur einmal für einen User ausgeführt wird. Dies spielt beim Anzeigen eines Threads eine grosse Rolle. dort wurde sonst für JEDEN Beitrag 2 mal die Funktion aufgerufen und damit pro Beitrag 2 mal die Tabelle durchsucht. Im schlimmsten Fall konnte also folgendes passieren: 100 User online -> 100 Einträge in der log-Tabelle -> 15 Beiträge werden angezeigt mit Online-Indikator -> 30 Aufrufe von Onlinestatus -> 30*100 Lesezugriffe auf die Log-Tabelle....
Jetzt passiert folgendes: 15 Beiträge von 10 Usern -> 30 Zugriffe auf OnlineStatus -> 10 DB-Zugriffe -> plus 20 mal aus Cache
Hab das Teil nur kurz testen können... wenn jemand nen grosses Board hat kann er es ja mal ändern und Bescheid geben obs sauber klappt und Performance bringt