在不降低网站性能的情况下,按人数捕获网页浏览量的最佳方法是什么。我看到stackoverflow在整个地方显示页面视图。每次点击页面时,他们是否都在插入数据库?
在asp.net-mvc中,是否有任何推荐的方法来跟踪每个用户的页面浏览量(我的网站有一个登录屏幕)所以我可以查看人们要访问的页面以及频率
答案 0 :(得分:32)
首先..如果您真正关心的是客户如何使用我的网站,那么您最有可能想要查看Google Analytics或类似的服务。
但是如果你想要一个快速和脏的页面查看记录,并且你正在使用ASP.Net MVC 3,那么当Chris Fulstow提到你将要使用混合的全局动作过滤器和缓存。这是一个例子。
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 ONLY ,您必须手动将相同的属性应用于所有操作。
[PageView]
public ActionResult CallOne()
{
}
[PageView]
public ActionResult CallTwo()
{
}
答案 1 :(得分:18)
最好的方法可能是global action filter拦截对所有控制器上所有操作的请求,然后为当前用户和页面增加数据库中的计数器。为了节省太多的数据库,您可以缓存这些值并每隔几分钟使其无效,具体取决于您要处理的流量。
答案 2 :(得分:5)
我们使用开源Piwik:http://piwik.org/,它在自己的服务器上设置。 _Layout页面中的一行Javascript在页面加载后调用Piwik(将JS放在最后)并且根本不影响页面加载性能。
除了数量之外,您还可以获得大量有关用户来源,浏览器,屏幕分辨率和已安装插件的信息。此外,您还可以跟踪转化情况并使用相同的工具来跟踪营销活动等。
<肥皂盒>
我无法想到你最好在MVC或web应用程序中实现这一点。这些东西根本不属于您的网络应用程序,是一个应该分离出来的元关注点。这种方法使我们能够以统一的方式跟踪所有应用程序(其中32个:mvc 2/3,webforms,php ...)的分析。
如果您真的不想为此目的使用其他工具,我建议您点按IIS日志并从中获取统计信息。再一次,要获得任何真正的决策权,你需要在其上放置一个好的分析器。我推荐Splunk:http://www.splunk.com/
< /肥皂盒>