W przepełnieniu stosu na stronie profilu wyświetlana jest właściwość "ostatnio widziana". Wydaje się, że nie jest ono aktualizowane na każdym widoku strony (oczywiście ze względu na wydajność). Jak zaimplementowałbyś to w aplikacji internetowej o dużym natężeniu ruchu? Czy zaktualizowałbyś go tylko na niektórych stronach? Lub buforować ostatni raz, kiedy zalogowałeś się na ostatnią wizytę użytkownika i odczekać określoną ilość czasu przed aktualizacją bazy danych? Czy coś zupełnie innego?Jak zaimplementować funkcję "ostatnio widzianą" dla użytkowników?
Odpowiedz
Prawdopodobnie okaże się, że pomocna jest "What strategy would you use for tracking user recent activity?". Problemy są podobne.
Posłużę się SESJĄ. I ustaw ją tylko na pierwszą wizytę w sesji. Także resetowanie go co godzinę, jeśli ludzie opuszczają przeglądarkę. W php coś takiego:
if(!isset(!_SESSION['lastSeen'])){
$_SESSION['lastSeen'] = time();
updateLastSeenInDatabaseOrSomething();
}
else{
if($_SESSION['lastSeen'] < time() + 2 * 60 * 60){ //2 hours
$_SESSION['lastSeen'] = time();
updateLastSeenInDatabaseOrSomething();
}
}
Coś takiego, ale potem z OO i nie robi tego samego dwa razy.
Na stronie o dużym natężeniu ruchu, takiej jak przepełnienie stosu, zaktualizowałbym zmienną "ostatnio widzianą" tylko wtedy, gdy użytkownik faktycznie ma coś, co robi. Czai się i czytając pytania i odpowiedzi nie powinno się liczyć, jako że użytkownik jest "widziany" przez system. Zadawanie i odpowiadanie na pytania lub głosowanie nad nimi powinno być działaniami, które aktualizują się, gdy użytkownik jest ostatnio widziany.
Nie będę mówił o szczegółach implementacji, ponieważ jest już objęty innymi odpowiedziami (i prawdopodobnie źle to zrozumiałbym).
Rozważ użycie wzoru projektu "Rozkaz" dla tego. Pomoże ci to na dwa sposoby - odpowiedz na pytanie i zastosuj funkcję "cofnij/ponów". Powinieneś utrzymywać listę obiektów poleceń zaprojektowanych według tego wzoru.