Heim  >  Artikel  >  Backend-Entwicklung  >  集思广益,关于有效浏览次数的计算,大家都是如何来做呢?

集思广益,关于有效浏览次数的计算,大家都是如何来做呢?

WBOY
WBOYOriginal
2016-06-06 20:46:521400Durchsuche

比如一个人对同一篇文章不停得刷新,这样不能算有效。我现在的想法是当用户第一次浏览文章的时候存一个cookie,cookie里有文章的id,有效期一个小时,如果同一小时,该用户访问该文章,如果cookie存在则不记录。不知道大家又没有更加高端,友好的统计方式。

回复内容:

比如一个人对同一篇文章不停得刷新,这样不能算有效。我现在的想法是当用户第一次浏览文章的时候存一个cookie,cookie里有文章的id,有效期一个小时,如果同一小时,该用户访问该文章,如果cookie存在则不记录。不知道大家又没有更加高端,友好的统计方式。

浏览记录最好通过日志来记录,然后进行日志分析即可,好处是异步。

日志记录用户ID,URL,访问时间。然后简单去做去重统计即可。

登录用户:用户ID+log+时间判断
未登录用户:客户端IP+log+时间判断
cookie也不错的,如果要节约资源直接CNZZ统计、百度统计

cookie记录不太合适,会造成request http header过大,现代浏览器可以用local storage存储在客户端,判断是否存在文章id再进行计数的request

这种统计就交给CNZZ,百度统计,谷歌统计等第三方统计平台吧。
浏览量,单页面浏览量,单人单页面浏览量,老访客,新访客等等都能统计到,展现方式也很友好。
还能数据导出。

可以采用bitmap思想:每篇文章对应一个bitmap,每个uid对应bitmap中的某offset,某uid访问这篇文章,把uid对应的offset置为1。这样就不会出现重复访问的问题,而且有现成的方法计算值为1的bit的数量。如果网站访问量不是很大的话,每篇文章对应的bitmap为128*128足够了。这样有点是简单,缺点可能就是还有存在资源浪费。

自己做个事件记录

客户端:
检测cookie,没有就随机生成一个作为客户标识(uid),并将超时设置很长很长....
js发送一条请求到事件记录服务器,参数:timestamp uid eventName eventValue
eventName 是事件名,比如 postVisit
eventValue是事件值,比如

服务端:
1. 记录事件到文件,可以按时间比如10分钟一个文件
2. 写个脚本 定时(10分钟)处理事件记录文件,根据eventName,eventValue 计算帖子访问量,然后更新数据库中对应字段(累加)

自由组合eventName,eventValue可以做多种事件统计

抛砖引玉一下,异步请求,用bloomfilter后台判断:
用户登录用用户id,用户未登录,用IP+UA或者其他生成用户标识
后台有一个bloomfilter的集合,用来判断是否已存在

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn