记录每页/对象访问的最佳实践方法是什么

das*_*uki 8 php python asp.net

我的个人资料为例,或者在本网站上查看任意数量的观点,记录网站上每页或对象的访问次数的过程是什么,我认为这包括:

  • 对注册用户进行一次计数(这必须反映在数据库中,用户访问过哪些页面/对象).这也不包括未注册的用户
  • IP:记录每页/每个IP的访问量; 这可能很麻烦,因为你可能有2个不同的人检查同一个网站; 或者你真的想跟踪重复访客.
  • Cookie:这可能会导致拥有多台计算机的人被计算两次
  • 其他方法在这里......

问题是,计算用户请求的过程和最佳实践是什么?

编辑

我已将计算机语言添加到标签列表中,因为它们对我很感兴趣.随意包含任何实现该任务的库,模块和/或扩展.

这个问题可以改为:

  • 当用户进入页面时,有人如何测量印记的数量?这个问题并不打算与Google分析所做的类似,而是应该类似于点击stackoverflow问题或个人资料并查看视图数量时的问题.

Joh*_*Mee 17

"正确"答案因情况而异; 主要是最理想的统计数据和收集和处理它们的资源的可用性:例如:

服务器端

原始Web服务器日志

所有Web服务器都有一些记录请求的工具.它们的问题在于它需要大量处理才能获得有意义的数据,对于您的示例场景,它们不会记录特定于应用程序的详细信息; 喜欢请求是否与注册用户相关联.

此选项不适用于您感兴趣的内容.

基于文件的应用程序日

应用程序员可以将自定义代码应用于应用程序,以将您最感兴趣的内容记录到日志文件中.这类似于webserver日志; 除了它可以是应用程序感知并记录像发出请求的成员之类的东西.

程序员可能还需要构建脚本,从这些日志中提取您最感兴趣的内容.此选项可能适用于具有大量磁盘空间的高流量站点和系统管理员,他们知道如何确保日志在发生错误之前从生产服务器进行轮换和修剪.

数据库应用程序日志

应用程序员可以为应用程序编写自定义代码,该代码记录数据库中的每个请求.这使得运行报告相对容易,并使数据可以立即访问.该解决方案在每个请求时产生更多的系统开销,因此更适合于较少的流量站点,或者数据被高度重视的场景.

客户端

Javascript回发

这是上述选项之外的考虑因素.谷歌分析就是这样做的.

每个页面都包含一些javascript代码,告诉客户端向Web服务器报告该页面已被查看.数据可能记录在数据库中,也可能写入文件.

在由于客户端和服务器之间的高速缓存/代理而导致印象丢失的情况下,具有提高准确性的强大优势.

饼干

每次收到来自未提供cookie的人的请求时,您都认为他们是新的并且记录为"匿名",并在他们登录后返回唯一标识的cookie.这取决于您的应用程序,证明这是多么准确.有些应用程序不适合缓存,所以它会非常准确; 其他人(高流量)鼓励缓存,这将降低准确性.显然,只要他们在切换浏览器/位置时重新进行身份验证,它就没有多大用处.

你最感兴趣的是什么?

那么问题是统计数据对你很重要.例如,在某些情况下,您很想知道:

  • 查看页面的次数,期间,
  • 已知用户查看页面的次数
  • 有多少已知用户查看过特定页面

因此,您通常希望将其分解为一段时间才能看到趋势.分别:

  • 我们从随机人那里获得更多观点吗?
  • 或者我们从注册用户那里获得更多观点?
  • 或几乎每个人都会看到现在看到的页面?

那么回到你的问题:"当用户进入页面时的印记数量"的最佳实践?

这取决于您的应用程序.

我的猜测是,您最好使用数据库支持的应用程序,该应用程序记录您的应用程序最有趣的内容并使用cookie来跟踪成员的会话.


And*_*ewF 5

点击计数器的最佳实践取决于您期望网站收到的流量。正如 wybiral 所建议的,您可以实现在每次请求后写入数据库的功能。如果您想计算唯一访问者的数量,这可能包括 IP 地址,也可能很简单,只需增加每个页面或每个(页面、用户)对的运行总数即可。

但这需要为每个请求写入数据库,即使您只想提供静态页面。理想情况下,可扩展的 Web 应用程序应尽可能从内存缓存中提供服务。应尽可能避免数据库或磁盘 I/O。

因此,理想的设置是在内存中构建服务器活动的某种表示,然后偶尔(例如每 15 分钟)将这些事件写入数据库。您可以想象将数千个请求排队,然后通过一次数据库写入来存储它们。

有一个教程描述了如何使用 Celery 和 Carrot 在 python 中准确执行此操作:http://packages.python.org/celery/tutorials/clickcounter.html。它还包括一些示例,说明如何使用 Django 模型设置数据库表以及每当有人访问页面时调用哪些代码。

无论您选择实现什么,本教程肯定会对您有所帮助,尽管如果您不期望每小时有数千次点击,那么这种级别的架构可能会有点过大。