PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Reload erweiterung der Onlineliste



FLash
19.03.2008, 07:59
Habe die onlineliste bishen optimiert.. so das sie erst nach überschreiten der eingestellten reloadzeit aktualisiert wird.... das könnt bei vielen usern viele dbabfragen sparen....


so sieht meine weristonline.php aus:



<?
$zeit = (5 * 60); // Sekunden seit der letzten Aktivität
$np = $domain.'/?content=/nickpage&amp;uid='; // Nickpagelink

// verhindern, dass die Datei direkt aufgerufen wird
if (!function_exists ("db_query")) die ("Kein Direktaufruf");

if (!isset($_SESSION['online']['data'])) {
$_SESSION['online']['data'] = db_query ('SELECT k.uid, u.nickname FROM '.$db_prefix.'_kontodaten k LEFT JOIN '.$db_prefix.'_userdaten u ON u.uid = k.uid WHERE k.last_active >= '.(time()-$zeit));

$_SESSION['online']['time'] = time();
}

if ($_SESSION['online']['time']+60 <= time() ) { // hier die reloadzeit einstellen
$_SESSION['online']['data'] = db_query ('SELECT k.uid, u.nickname FROM '.$db_prefix.'_kontodaten k LEFT JOIN '.$db_prefix.'_userdaten u ON u.uid = k.uid WHERE k.last_active >= '.(time()-$zeit));

$_SESSION['online']['time'] = time();
}


if (mysql_num_rows ($_SESSION['online']['data']) == 0) echo '<span style="font-style: italic;">keiner</span>';
else {
$nr = 1;
while ($user = mysql_fetch_assoc ($_SESSION['online']['data'])){
if ($user['uid'] == $admin_id) { echo '<a style="font-weight: bold; " href="'.$np.$user['uid'].'"><font color="#0000FF">'.$user['nickname'].'</a>';
}else{
if ($user['uid'] == 'xxxxx') { // Admin 2
echo '<a style="font-weight: bold;" href="'.$np.$user['uid'].'"><font color="#00AA00">'.$user['nickname'].'</a>';
}else{
if ($user['uid'] == 'xxxxx') { // Admin 3
echo '<a style="font-weight: bold;" href="'.$np.$user['uid'].'"><font color="#17CEB5">'.$user['nickname'].'</a>';
}else{
echo '<a href="'.$np.$user['uid'].'">'.$user['nickname'].'</a>';
}
}
}
if ($nr < mysql_num_rows ($_SESSION['online']['data'])) echo ', ';
$nr++;
}
}
?>
&nbsp;<a href="?content=/intern/userliste">userliste</a>&nbsp;&nbsp;


hab allerdings hierbei noch 2 weitere user hinzugefügt, deren nick dann auch Fett und dazunoch farblich farblich dargestellt wird...

wer sich bishen mit php auskennt wird schon wissen welche textstellen zu entfernen bzw zu ändern sind....
ist zwar nicht die beste lösung für das hinzufügen von admins, aber eine funktionierende ;) .. anstatt die xxxxx kommt natürlich die uid hin ;)

ich übernehme keine garantie für die funktion dieses scriptes :nono: .. bei mir funktioniert es jedenfalls :prrr:

jpwfour
19.03.2008, 12:57
nur muss man entscheiden, ob es wirklich überall sinnvoll ist, datenbank abfragen einzusparen, da ja die werte in den session variablen platz im arbeitsspeicher bzw. auf der festplatte benötigen, und auch von der zugriffszeit je nach server/konfiguration nicht sehr viel schneller als datenbank abfragen sind, wobei das natürlich auch wieder von der datenabnk software abhängt.

noch schöner wäre es da vielleicht, mit einer temporären datei zu arbeiten, die dann für alle user gleich ist, und anhand des letzten änderungsdatums alle 60 sec, neu erstellt wird, wobei sich sowas wahrscheinlich erst bei längeren zeiten, so 5 minuten aufwärts, lohnt.

FLash
19.03.2008, 15:10
jap das stimmt..

das mit einer zeit von 5 minuten ist mir aber auch einfach zu viel..

man muss halt abwägen was besser ist..

wobei wenn man dbabfragen verwendet denk ich das es langsamer geht.. bis die anforderung zur db geht und zurück dauert das erstmal auf jedenfall länger als mit einen kleinen cookie (muss aber nicht sein).. der speicherplatzbedarf sollte auch ziemlich gering sein..

und ich denk mal auf einer klickseite wird die db weitaus mehr belastet als der webserver an sich wenn die ganzen leute anfangen zu klicken.. da gehen wahrscheinlich mehr daten zur db als zum webserver aleine schon wegen den ganzen ralleys.. ( pro ralley 2 abfragen a ca. 0.1kb ( bei kompression) mal 10 ralleys sind 1kb hinzukommt das mehr an rechenleistung was benötigt wird) im gegensatz wird der webserver kaum belastet da das meiste eh schon im cache des browsers ist....

wie auch immer probieren geht über studieren.. und das kann ich nciht, denn auf meiner seite sind nicht 1000 user angemeldet und so kann ich auch nicht rausfinden was schneller und besser ist..

der vorteil gegenüber einer festen datei wär, wenn ein user die seite öffnet, das er immer die aktuelle liste sieht und sich selbst auch darauf findet kann anstatt dumm aus der wäsche zu gucken wenn man mal seine eigene nickpage besuchen möchte :crazy:

Die feste datei jedenfalls würde auf jeden fall insgesamt weniger abfragen verbrauchen, worunter die aktualität leidet.. und ob der download der einen datei schneller ist als das mit dem cookie ist auch fraglich..

immerhin haben heutige rechner schon soviel an speicherplatz und rechenleistung das man sowas machen kann..
oder kannst du dir etwa vorstellen das ich mal mit einen p120mhz mit 16mb ram im web gesurft hab und der seitenaufbau nicht viel langsamer war ?

jpwfour
19.03.2008, 17:59
nur das $_SESSION eigentlich aus gründen der sicherheit nicht als cookie abgelegt werden sollte, dafür gibt es $_COOKIE!
stell dir mal vor, du checkst nur per if($_SESSION['login']==true) ob ein user eingeloggt ist, und dieser wert wird bei ihm auf dem pc abgelegt, dann kann er sich ganz schnell "reinmogeln".
daher werden eigentlich die werte in den sessions im arbeitspeicher des servers bzw. auf der festplatte abgelegt, und sollten (bei einem sicher konfigurierten server) nicht vom user beeinflussbar sein.

aber abgesehen davon stimmt es natülrih, dass bei einer klickseite eh schon soviele db abfragen stattfinden, dass man da gut daran tut, an soclhen stellen ein paar einzusparen.