2009-01-22 8 views
5

In Stack Overflow wird auf der Profilseite die Eigenschaft "zuletzt gesehen" angezeigt. Dies scheint nicht auf jeder Seite aktualisiert zu werden (aus Gründen der Performance, offensichtlich). Wie würden Sie es in einer Web-App mit hohem Traffic implementieren? Würden Sie es nur auf bestimmten Seiten aktualisieren? Oder cachen Sie das letzte Mal, wenn Sie den letzten Besuch des Benutzers protokolliert haben, und warten Sie eine bestimmte Zeit, bevor Sie die Datenbank aktualisieren? Oder etwas ganz anderes?Wie würden Sie eine "Zuletzt gesehen" -Funktion für Benutzer implementieren?

Antwort

2

Ich würde eine Sitzung verwenden. Und nur den ersten Besuch der Sitzung festlegen. Es wird auch jede Stunde oder so zurückgesetzt, wenn die Leute den Browser geöffnet lassen. In PHP etwas wie folgt aus:

if(!isset(!_SESSION['lastSeen'])){ 
$_SESSION['lastSeen'] = time(); 
updateLastSeenInDatabaseOrSomething(); 
} 
else{ 
if($_SESSION['lastSeen'] < time() + 2 * 60 * 60){ //2 hours 
    $_SESSION['lastSeen'] = time(); 
    updateLastSeenInDatabaseOrSomething(); 
} 
} 

So etwas aber dann mit OO und nicht die gleiche Sache zweimal tun.

5

Auf einer stark frequentierten Website wie Stack Overflow, würde ich nur die "zuletzt gesehen" Variable aktualisieren, wenn ein Benutzer tatsächlich tut, was tut etwas. Lerchen und Lesen von Fragen und Antworten sollte nicht als ein vom System "gesehen" werden. Fragen stellen oder beantworten oder über sie abstimmen sollten Aktionen sein, die aktualisiert werden, wenn ein Benutzer zuletzt gesehen wird.

Ich werde nicht über die Implementierungsdetails sprechen, weil das bereits durch andere Antworten abgedeckt ist (und ich würde es wahrscheinlich falsch verstehen).

0

Verwenden Sie das Entwurfsmuster "Command". Es hilft Ihnen auf zwei Arten - beantworten Sie die Frage zur Hand und implementieren Sie auch eine "Rückgängig/Wiederholen" -Funktion. Sie sollten eine Liste von Befehlsobjekten verwalten, die für dieses Muster entworfen wurden.