【问题标题】:Most Efficient Way to Count Clicks计算点击次数的最有效方法
【发布时间】:2011-01-20 18:25:20
【问题描述】:

我开始在网站上投放一些广告,并且正在尝试确定跟踪效果的最佳方式。

具体来说,

  1. 计算点击次数最有效的方法是什么?关于我能想到的唯一方法是将广告链接到另一个页面,并将广告的 ID 作为参数(例如 adserver.aspx?id=1234)。然后另一个页面将更新数据库并重定向到广告商的链接。但是,为此必须加载单独的页面似乎效率低下。还有其他选择吗?

  2. 此外,我似乎可能需要知道某周内发生了多少点击等信息。但是为每一次点击存储一个单独的数据库行和一个日期似乎是多余的。有没有其他人做过这样的事情?每周创建一个新行并为该周发生的所有点击增加一个计数器是否有意义?

感谢任何提示。

【问题讨论】:

  • “为此必须加载单独的页面似乎效率低下” 这句话告诉我你的HTTP知识达不到标准。
  • @Josh:我有点同意乔纳森的观点。为什么调用页面,等待服务器处理它,接收 HTTP 重定向(或类似的),请求新页面,等待服务器处理它......?基本上,您正在等待 2 次往返。使用 JavaScript,您可以将其缩短为显示页面的一次往返,然后是更轻量级的 AJAX 调用来记录点击。
  • @Josh:感谢您发表评论,但对对话没有任何帮助。事实上,处理 ASP.NET 页面请求的开销相当大。

标签: javascript asp.net sql


【解决方案1】:

我建议您的第一个解决方案是最佳选择,事实上它是大多数类似系统(OpenX、Google AdSense 等)采用的设计。此外,它还可以帮助您更好地管理横幅并防止您的网站泄露搜索引擎蜘蛛。

至于性能只是一个良好设计的问题,在典型设计中,重定向脚本将相当轻量级,因此应该相当快地处理请求。值得一提的是,您可以关闭数据库更新以减少重定向请求响应时间。

当然还有另一种选择:

而不是自制你自己的横幅服务脚本来实现 OpenX,它是免费的并且是一个非常好的软件。 OpenX 可以在这里找到:

http://openx.org/

这里是您可以在自己的服务器上运行的开源版本:

http://www.openx.org/publisher/open-source-ad-server

另一种选择是实施 Google AdSense 之类的东西,省去寻找广告商等的麻烦。Google 还提供了一些工具,让您可以出售横幅空间,然后在您没有活跃的广告商时回退到默认的 AdSense 横幅(OpenX 将也这样做,还支持集成 AdSense(和其他广告商))

【讨论】:

  • 感谢您的链接。我不知道有这样的免费东西。我需要花点时间研究一下。
  • 从 OpenX 来看,它似乎与 AdSense 基本相似,其中广告拍卖决定了投放哪些广告。这很有趣,我可能会进一步研究,但我不相信这是赚最多钱的方式。与 Adsense 类似的案例,我已经使用了多年。效果很好——除非你想赚很多钱。
  • 另外一件事,如果广告链接到我的广告服务器页面并且没有回发,那如何防止“泄露搜索引擎蜘蛛”?您的意思是让我的代码查看用户代理字符串或其他内容吗?谢谢。
  • 是的,在您的广告代理脚本中,您可以检查用户代理并阻止搜索引擎蜘蛛跟踪该链接。顺便说一句,href 上的 nofollow 将提供类似的功能,但需要蜘蛛遵守 nofollow。
【解决方案2】:

你可以用 JavaScript 做到这一点。

打开页面:

  1. 将广告网址发送给客户
  2. 当用户点击广告时,使用 JavaScript 打开 URL。或者,只需使用带有target="_blank" 的锚点。

记录点击:

  1. 无论哪种方式,都将 JavaScript 函数与广告点击事件挂钩。
  2. 当用户点击广告时,使用 AJAX 调用网络服务。然后,网络服务将记录点击。

这样广告会尽快打开,然后浏览器异步与服务器通信进行日志记录。

问题是,如果用户点击广告,页面打开,然后网络服务调用失败,会发生什么?如果您愿意,您可以先调用 Web 服务,然后且仅当调用成功时,才打开广告。从最终用户的角度来看,可能不是最好的。

对于您的问题 #2:存储每次点击可为您提供最大的报告灵活性。如果您设置了每周报告,为什么不设置一个每周流程来生成您需要的报告,然后清理数据?您甚至可以暂时跳过清理数据,直到空间或速度成为问题。

Would it make sense to maybe create a new row for each week and increment a counter for all clicks that occurred that week? 可能不会。一次只有一个进程可以更新计数器,否则您将丢失数据。必须发生的锁定以获取值然后更新它可能会显着减慢。

【讨论】:

  • ...当然,如果您使用 JavaScript,它在某些浏览器中可能根本无法工作。在这种情况下,您可能需要一个带有额外页面的后备机制。 :)
  • @Nelson:我想知道 javascript,但我不是这方面的专家,也不知道如何从运行客户端的东西到数据库。我将不得不更仔细地研究您的描述并对此进行一些研究。而且,是的,并非所有浏览器都支持可能是个问题。
  • @Jonathan:顺便说一下,我检查了 Google 广告的作用,看起来它们确实有一个中间页面。我没有看到任何 HTTP Redirect 标头,但他们在页面中有这个:<body><a href="http://example.com" id=link target=_parent></body><script>var a=parent,b=parent.google,c=location;if(a!=window&&b){if(b.r){b.r=0;document.getElementById("link").click();}}else{document.getElementById("link").click();};</script><noscript><META http-equiv="refresh" content="0;URL='http://example.com'"></noscript> 您可以使用IHttpHandler 而不是Page 轻松实现类似的东西。
  • @Nelson:很有趣——谢谢!此外,关于增加一周内所有点击的计数器,我不确定我最初是否清楚。我说的是为任何给定的一周生成一个唯一的数字,当我获得点击时,增加当前广告/周的值,或者如果是新的一周则创建一个新行。我认为这不会是锁定或丢失数据的问题。
  • @Jonathan:但是您将如何“增加当前广告/周的价值”?不是排成一排吗?所有的广告点击都会尝试更新该单行。不确定性能影响,但我怀疑有一些影响。
猜你喜欢
  • 2011-01-23
  • 1970-01-01
  • 2011-01-26
  • 1970-01-01
  • 2011-03-22
  • 2023-04-10
  • 1970-01-01
  • 2016-10-29
相关资源
最近更新 更多