29

在 asp.net mvc 中实现 AB 测试的最佳和最干净的方法是什么?也就是说,当我们对 asp.net mvc 网站进行新的更改时,我们希望使用特定的访问者子集(在 cookie、登录 ID 等上定义)测试新的 html/css/js,然后分析一些指标(页面响应时间、访问的页面数量、销售额等),然后衡量更改的成功程度。

我正在寻找一种干净的方法来实现一种选择使用 asp.net mvc 呈现的视图(html/css/js 等)的方法。

4

6 回答 6

14

查看FairlyCertain (http://www.fairtutor.com/fairlycertain/)当你有机会的时候。这是一个 .NET A/B 库,您几乎可以将其放入您的项目并开始编写测试。

与 Google 和 VisualWebsiteOptimizer 的 Javascript 库不同,一切都发生在服务器上,因此您不会遇到任何性能、用户体验或 SEO 问题。我已经在我的东西中使用它一段时间了,而且效果很好。

于 2010-11-05T09:59:10.463 回答
5

有一个专门用于 ASP.NET MVC的A/B 测试框架。这是我自己编写的一个开源软件,就像你一样,没有找到一个可以很好地与 ASP.NET MVC 配合使用并且不需要太多设置的免费工具。

于 2014-04-09T23:54:07.347 回答
3

谷歌内容实验?这是一个基于 Javascript 的解决方案,不需要您的后端提供任何东西。

  1. 您在页面上包含 Google 的 Javascript
  2. 该脚本会随机替换您的 A/B 测试定义的页面上的元素
  3. 谷歌的网站向您展示了一个很好的结果细分......
于 2009-09-24T15:57:13.443 回答
2

如果您使用的是 spark 视图引擎,则可以使用主题过滤器的变体 ( http://sparkviewengine.com/documentation/viewlocations#Extendingfilepatternswithdescriptorfilters ) 来实现。对于网站的每个新访问者,确定您是否希望他们看到网站的现有版本或新版本并设置 cookie。连接一个描述符过滤器,用于查找 cookie 的存在并修改视图位置以查看包含已修改视图的文件夹。如果存在替代视图,Spark 引擎将自动渲染它以代替“普通”视图,否则将渲染普通视图。

如果您使用的是普通的 WFVE,那么管理它的最简单方法是在视图下定义一个文件夹,您的视图替代项所在的位置。当您想提供替代视图时,请将其放置在与其在普通 Views 文件夹中的位置相匹配但根植于替代文件夹的位置,例如,提供 Views/Users/login.aspx 的替代视图将您的新视图放置在 Views/替代/用户/login.aspx。

有了用于定位替代视图的约定,您可以扩展 WebFormViewEngine 并重载 CreatePartialView / CreateView 以检查 ControllerContext 的某些方面以确定是呈现默认视图还是重载视图并根据需要更改路径,例如更改 .../视图/用户/login.aspx 到 .../Views/Alternative/Users/login.aspx。

于 2009-10-08T21:22:06.530 回答
1

我建议你使用 Display Modes 来实现 A/B 测试。

但是显示模式默认只支持简单的问题。

如果您已经在其他一些场景中实现了显示模式。您可以考虑 DisplayModeMatrix (只是谷歌它)。它可以帮助您更高效地使用显示模式。

https://www.nuget.org/packages/DisplayModeMatrix/

使用显示模式,您可以在 A/B 测试后简单地删除/重命名视图以清理您的项目。

于 2016-12-19T08:26:36.683 回答
-1

I think there isn't a ready to use solution for this and you will have to improvise.

Try to override your current functionality in well defined points without breaking it. Explicitly draw a border where your regular code and A-B testing code lives.

Inversion of control principle might help a lot here too (i.e. - controller factory could provide derived controller instead of original one). For views&partialviews - you could change viewengine so it would try to look for 'MyPartialViewAB.ascx' instead of 'MyPartialView.ascx'.

And it might be a good idea to take a look what performance counters are (in case you haven't).

于 2009-09-24T07:20:35.513 回答