您将如何为用户实现“上次看到”的功能?

时间:2009-01-22 14:05:10

标签: scalability user-tracking

在Stack Overflow上,配置文件页面列出了“上次看到”属性。这似乎没有在每个页面视图上更新(出于性能原因,显然)。您将如何在流量大的网络应用中实现它?你会仅在某些页面上更新吗?或者在上次记录用户上次访问时缓存并在更新数据库之前等待一段特定时间?还是完全不同的东西?

4 个答案:

答案 0 :(得分:6)

在像Stack Overflow这样流量大的网站上,我只会在用户实际某事时更新“上次见过”的变量。潜伏并阅读问题和答案不应被视为系统“看到”的用户。询问和回答问题,或对它们进行投票应该是在最后一次见到用户时更新的操作。

我不会谈论实施细节,因为其他答案已经涵盖了(我可能会错的)。

答案 1 :(得分:3)

您可能会发现"What strategy would you use for tracking user recent activity?"有帮助。问题很相似。

答案 2 :(得分:3)

我会使用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并没有两次做同样的事情。

答案 3 :(得分:0)

考虑使用“Command”设计模式。它将帮助您两种方式 - 回答手头的问题,并实现“撤消/重做”功能。您应该维护一个按照该模式设计的命令对象列表。