在Stack Overflow上,个人资料页面列出了“上次见面”的属性。显然,这个属性不会在每个页面视图中更新(出于性能原因)。你会如何在一个大流量的Web应用程序中实现它?你只会在某些页面上更新它吗?或者缓存用户上次访问的时间,并在更新数据库之前等待一定的时间?或者完全不同的东西?
你会如何为用户实现一个“最后查看”功能?
原标题:
问题回答
在像 Stack Overflow 这样高流量的网站上,我只会在用户实际执行了某些操作时更新“上次见到”的变量。潜水并阅读问题和答案不应被计算在用户被系统“看到”的范畴内。提出问题、回答问题或者投票都应该是更新用户上次出现时间的操作。
我不会谈论实施细节,因为其他回答已经涵盖了此部分(而且我可能会说错)。
你可能会发现对于跟踪用户最近活动,“你会使用什么策略?”这篇文章会很有帮助。问题是类似的。
我会使用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,不要重复做同样的事情。
考虑使用“命令”设计模式。它将帮助您两个方面 - 回答手头的问题并实现“撤销/重做”功能。您应该维护一个根据该模式设计的命令对象列表。
相关问题
热门标签
- winforms
- combobox
- fogbugz
- java
- date
- internationalization
- asp.net
- iis
- url-rewriting
- urlrewriter
- c#
- enums
- ocaml
- haxe
- algorithm
- string
- viewstate
- .net
- c++
- c
- symbol-table
- mysql
- database
- postgresql
- licensing
- migration
- vb.net
- vb6
- declaration
- vb6-migration
- python
- psycopg2
- backup
- vmware
- virtualization
- gnu-screen
- authentication
- desktop
- excel
- xll
- cultureinfo
- regioninfo
- oracle
- client
- session
- download
- html
- virtual
- constructor
- scenarios
- perl
- full-text-search
- javascript
- ajax
- testing
- oop
- inheritance
- vim
- encapsulation
- information-hiding