leo*_*ora 31 c# asp.net-mvc pageviews
什么是在不降低网站性能的情况下捕获页面查看的最佳方式.我看到stackoverflow在整个地方显示页面视图.每次点击页面时,他们是否正在插入数据库?
在asp.net-mvc中,是否有任何推荐的方法来跟踪每个用户的页面浏览量(我的网站有一个登录屏幕)所以我可以查看人们要访问的页面以及频率
Sha*_*lle 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; }
}
}
Run Code Online (Sandbox Code Playgroud)
在你的Global.asax.cs中
public class MvcApplication : HttpApplication
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new PageViewAttribute());
}
}
Run Code Online (Sandbox Code Playgroud)
对于pre-ASP.Net MVC 3 只,你将不得不手动应用相同的属性,以你的所有行动.
[PageView]
public ActionResult CallOne()
{
}
[PageView]
public ActionResult CallTwo()
{
}
Run Code Online (Sandbox Code Playgroud)
我们使用开源Piwik:http://piwik.org/,它是在自己的服务器上设置的._Layout页面中的一行Javascript在页面加载后调用Piwik(将JS放在最后)并且根本不影响页面加载性能.
除了计数之外,您还可以获得大量有关用户来源,浏览器,屏幕分辨率和已安装插件的信息.此外,您还可以跟踪转化情况并使用相同的工具来跟踪营销活动等.
<肥皂盒>
我无法想象你最好在MVC或Web应用程序中实现这一点.这些东西根本不属于您的网络应用程序,是一个应该分离出来的元关注点.这种方法使我们能够以统一的方式跟踪所有应用程序(其中32个:mvc 2/3,webforms,php ...)的分析.
如果你真的不想为此目的使用其他工具,我建议你点击你的IIS日志并从那里获取你的统计数据.再一次,为了获得任何真正的决策权,你需要在它上面安装一个好的分析仪.我推荐Splunk:http://www.splunk.com/
</肥皂盒>
| 归档时间: |
|
| 查看次数: |
13526 次 |
| 最近记录: |