6

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

4

4 回答 4

6

在 Stack Overflow 等流量大的网站上,我只会在用户实际执行某项操作时更新“最后一次看到”变量。潜伏并阅读问题和答案不应算作系统“看到”的用户。提问和回答问题或对其进行投票应该是在用户最后一次出现时更新的操作。

我不会谈论实现细节,因为其他答案已经涵盖了这一点(我可能会弄错)。

于 2009-01-22T14:17:57.593 回答
3

您可能会发现“您将使用什么策略来跟踪用户最近的活动?” 乐于助人。问题类似。

于 2009-01-22T14:09:50.137 回答
3

我会使用一个会话。并且仅将其设置为会话的第一次访问。如果人们让浏览器保持打开状态,也每隔一小时左右重置一次。在 php 中是这样的:

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

类似的事情,但随后使用 OO 而不是两次做同样的事情。

于 2009-01-22T14:11:18.760 回答
0

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

于 2009-01-22T14:18:56.653 回答