2009-01-22 46 views
5

在Stack Overflow上,配置文件頁面列出了「上次看到」屬性。這似乎並未在每個頁面視圖中更新(顯然是出於性能原因)。你將如何在大流量的Web應用程序中實現它?你會只在某些頁面上更新它嗎?或者緩存上次登錄用戶上次訪問的時間,並在更新數據庫之前等待特定時間?或者完全不同的東西?如何爲用戶實現「上次看到」功能?

回答

2

我會使用SESSION。並且只將它設置爲會話的第一次訪問。如果人們離開瀏覽器,每個小時左右還要重新設置一次。在php這樣的事情:

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

這樣的事情,但隨後與OO,而不是兩次做同樣的事情。

5

在像Stack Overflow這樣的交通繁忙的網站上,我只會更新「上次看到」的變量,當用戶實際上做了的事情。潛伏並閱讀問題和答案不應視爲系統「看到」的用戶。詢問和回答問題,或對他們進行投票應該是上次看到用戶時更新的操作。

我不會談論實現細節,因爲這已經被其他答案覆蓋了(我可能會弄錯它)。

0

考慮爲此使用「Command」設計模式。它將以兩種方式幫助你 - 回答當前的問題,並執行「撤消/重做」功能。您應該維護一個按照該模式設計的命令對象列表。