在asp.net-mvc中捕获每个用户的页面浏览量的最佳方法是什么

什么是在不降低网站性能的情况下捕获页面查看的最佳方式。 我看到stackoverflow显示了整个地方的页面视图。 每次点击页面时,他们是否都在插入数据库?

在asp.net-mvc中,是否有任何推荐的方法来跟踪每个用户的页面浏览量(我的网站有一个登录屏幕)所以我可以查看人们要访问的页面以及访问频率

最好的方法可能是一个全局操作filter ,它拦截对所有控制器上所有操作的请求,然后为当前用户和页面增加数据库中的计数器。 为了节省太多的数据库,您可以缓存这些值并每隔几分钟使它们失效,具体取决于您要处理的流量。

首先..如果您真正关心的是客户如何使用我的网站,那么您最有可能想要查看Google Analytics或类似的服务。

但是如果你想要一个快速而脏的页面查看记录,并且你正在使用ASP.Net MVC 3,那么正如Chris Fulstow所说,你将要使用全局动作filter和缓存的混合。 这是一个例子。

PageViewAttribute.cs public class PageViewAttribute : ActionFilterAttribute { private static readonly TimeSpan pageViewDumpToDatabaseTimeSpan = new TimeSpan(0, 0, 10); public override void OnActionExecuting(ActionExecutingContext filterContext) { var calledMethod = string.Format("{0} -> {1}", filterContext.ActionDescriptor.ControllerDescriptor.ControllerName, filterContext.ActionDescriptor.ActionName); var cacheKey = string.Format("PV-{0}", calledMethod); var cachedResult = HttpRuntime.Cache[cacheKey]; if(cachedResult == null) { HttpRuntime.Cache.Insert(cacheKey, new PageViewValue(), null, DateTime.Now.Add(pageViewDumpToDatabaseTimeSpan) , Cache.NoSlidingExpiration, CacheItemPriority.Default, onRemove); } else { var currentValue = (PageViewValue) cachedResult; currentValue.Value++; } } private static void onRemove(string key, object value, CacheItemRemovedReason reason) { if (!key.StartsWith("PV-")) { return; } // write out the value to the database } // Used to get around weird cache behavior with value types public class PageViewValue { public PageViewValue() { Value = 1; } public int Value { get; set; } } } 

在你的Global.asax.cs中

 public class MvcApplication : HttpApplication { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new PageViewAttribute()); } } 

对于pre-ASP.Net MVC 3,您将不得不手动将相同的属性应用于所有操作。

 [PageView] public ActionResult CallOne() { } [PageView] public ActionResult CallTwo() { } 

我们使用开源Piwik: http : //piwik.org/ ,它是在自己的服务器上设置的。 _Layout页面中的一行Javascript在页面加载后调用Piwik(将JS放在最后)并且根本不影响页面加载性能。

除了计数之外,您还可以获得大量有关用户来源,浏览器,屏幕分辨率,已安装插件的信息。 此外,您还可以跟踪转化情况并使用相同的工具来跟踪营销活动等。

<肥皂盒>

我想不出你最好在MVC或Web应用程序中实现这一点的情况。 这些东西根本不属于您的网络应用程序,是一个应该分离出来的元关注点。 这种方法使我们能够以统一的方式跟踪我们所有应用程序(其中32个:mvc 2/3,webforms,php …)的分析。

如果你真的不想为此目的使用其他工具,我建议你点击你的IIS日志并从那里获取你的统计数据。 再一次,要获得任何真正的决策权,你需要在其上放置一个好的分析器。 我推荐Splunk: http : //www.splunk.com/

Interesting Posts