让产品有效迭代,前端A/B Testing的简单实现

简介:
A/B Testing简介

互联网产品的迭代速度很快,往往一周一小发布,一月一大发布,产品提出的种种需求,哪些改动是提升产品体验的,哪些是阻碍产品进步的,如果没有数据可以参考,仅仅是靠拍脑袋的话,对产品成功与否来说是及其不严谨的,产品的成功不能只靠运气或者可能,而是要以数据为依据,靠数据说话,A/B Testing是众多数据中的一种。

所谓A/B Testing是可以帮产品快速检验变化有效的一种手段,比如PC站点的导航栏开始在左边,一次产品迭代将它改到了右边,如何检测这次简单的改动是否有效,如何判断转换率的提升,当然我们可以检测上线后转换率的变化,但是这种检测不是最严谨的做法,更好的方法可能是:

将用户平均分成两组,一组使用旧的产品,一组使用新的产品,然后通过两组用户的数据对比,最终得出这次改动是不是有效的
这里的几个特点是:

① 至少有两个版本(一般来说两个即可)

② 可动态控制到每个版本的流量

③ 能够检测到每个版本的转换率,能收集数据

通过阅读本文,可以了解到一个简单的A/B Testing的前端实现方案的实现(多数A/B Testing还是基于服务器端的)

文中是我个人的一些框架&业务开发经验,希望对各位有用,也希望各位多多支持讨论,指出文中不足以及提出您的一些建议。

代码地址:https://github.com/yexiaochai/mvc/

建议对此文有兴趣的朋友先看这两篇博客:

【移动前端开发实践】从无到有(统计、请求、MVC、模块化)H5开发须知

【组件化开发】前端进阶篇之如何编写可维护可升级的代码

前端实现

做代码实现的时候,首先抓住一个关键点:关注不同版本转换率的变化,我们这里的转换率便是订单提交数据,所以这里可以得到一个结论(不同项目不一样)

在创建订单的时候需要记录该次订单来源于A方案还是B方案,这样的话我们最终可以得到一个数据:

A方案今天创建了多少订单,B方案今天创建了多少订单,然后在微调不同方案的流量,这样便能对比出这次改动是否有意义了

PS:一般来说,A/B Testing针对的是大流量页面

本来A/B Testing可能还需要保证一个用户进入一个页面总是采用上次的方案,这个实现需要看你项目实际需要

根据以下需求,我得出了代码要求:

① 有方案可以让新老页面同时可访问
② 有方案控制新老页面的访问比例
③ 有方案得到各个页面(方案)最终产生订单的数据
这里我们依旧以list产品列表页为例,我们可能还需要记录进入不同方案的PV,这里可以使用百度统计类产品,自定义事件完成,我们这里不予关注

两个方案同时存在

我们这里完成的第一个功能是两个方案同时存在,这里我们做了一个事情:将原有的pages复制了一份出来,作为过去版本:



因为框架的便宜,我们可以在实例化时候做简单操作便可以实现两套代码同时可访问,比如我们这里让url带一个plan=b便访问老代码,我们这里做一个变化是将下面工具栏的位置放上去:



当然我不得不说这次改动十分傻逼,但是我们也料不到产品会如何出招啊,这里仅仅是举个例子,我们这里只是简单的改了下main.js的代码:

复制代码
 1 (function () {
 2     var project = './';
 3     var viewRoot = 'pages';
 4 
 5 
 6     //这里仅仅需要对list页做A/B Testing
 7     var viewMapping = {};
 8     var ver = 'ver/1.0.0/';
 9     var APath = 'pages/list/list';
10     var BPath = ver + APath;
11     viewRoot = ver + viewRoot;
12 
13     //默认最新方案
14     viewMapping.list = APath;
15     if (_.getUrlParam().plan && _.getUrlParam().plan == 'b') {
16         viewMapping.list = BPath;
17         project = './' + ver;
18     }
19 
20     require.config({
21         paths: {
22             //BUS相关模板根目录
23             IndexPath: project + 'pages/index',
24             ListPath: project + 'pages/list',
25             CityPath: project + 'pages/city',
26 
27             TemplatePath: project + 'templates',
28 
29             BusStore: project + 'model/bus.store',
30             BusModel: project + 'model/bus.model'
31         }
32     });
33     require(['AbstractApp', 'UIHeader'], function (APP, UIHeader) {
34 
35         window.APP = new APP({
36             //配置A/B Testing
37             viewMapping: viewMapping,
38             UIHeader: UIHeader,
39             viewRootPath: viewRoot
40         });
41         window.APP.initApp();
42     });
43 })();
复制代码
控制流量

我们这里要做的第二件事情是控制流量,这里如果想用户第二次依旧保持上一次的方案,可以使用localsorage,我们这里边简单的使用随机数控制吧,这里将上述代码做了一个优化:

复制代码
 1 (function () {
 2     var project = './';
 3     var viewRoot = 'pages';
 4 
 5     //这里仅仅需要对list页做A/B Testing
 6     var ver = 'ver/1.0.0/';
 7 
 8     //在这里设置比例参数,数字0-10,默认A方案为10,只使用最新方案
 9     //a 方案所占比例为60%
10     var APlan = 6;
11 
12     //产生1-10随机数,如果条件满足则为plan B 
13     var abRandom = parseInt(Math.random() * 10);
14     if (abRandom >= APlan) {
15         project = './' + ver;
16         viewRoot = ver + viewRoot;
17     }
18 
19     //如果url强制设置plan=b则使用老方案
20     if (_.getUrlParam().plan && _.getUrlParam().plan == 'b') {
21         project = './' + ver;
22         viewRoot = ver + viewRoot;
23     }
24 
25     require.config({
26         paths: {
27             //BUS相关模板根目录
28             IndexPath: project + 'pages/index',
29             ListPath: project + 'pages/list',
30             CityPath: project + 'pages/city',
31 
32             TemplatePath: project + 'templates',
33 
34             BusStore: project + 'model/bus.store',
35             BusModel: project + 'model/bus.model'
36         }
37     });
38     require(['AbstractApp', 'UIHeader'], function (APP, UIHeader) {
39 
40         window.APP = new APP({
41             UIHeader: UIHeader,
42             viewRootPath: viewRoot
43         });
44         window.APP.initApp();
45     });
46 })();
复制代码
于是我们做到了简单的流量控制,这里控制60%访问最新方案,40%访问老方案。

数据记录

我们这里完成的最后一步便是数据记录了,根据之前我们的接口设计,我们完全可以在此加上一个通用的字段:

PS:这里不懂的请看此篇博客:【移动前端开发实践】从无到有(统计、请求、MVC、模块化)H5开发须知

head: {
    us: '',
    version: '1.0.0',
    plan: ''
}
我们每次创建订单的时候皆会将此参数传给服务器端,包括版本、渠道,现在现在一个plan服务器端即可收集。

而这个plan的记录方式有多种方案,可以释放全局方法,或者将该参数注入给APP等方案,因为我们这里不会有接口提交,这里便略去。

结语

今天我们简单的介绍了下A/B Testing的概念,并且站在前端的角度对其进行了实现,其中方案还没完全落地到实际项目中,后续落地到项目中去后可能会完善此文吧

重要的事情

如果您觉得这篇博客对您哪怕有一丝丝的帮助,微博求粉博客求赞!!!




本文转自叶小钗博客园博客,原文链接http://www.cnblogs.com/yexiaochai/p/4892777.html,如需转载请自行联系原作者
相关文章
|
2月前
|
前端开发 JavaScript 开发者
【前端开发者的福音】彻底改变你编码习惯的神奇数组迭代技巧——从基础到进阶,解锁 JavaScript 数组迭代的N种姿势!
【8月更文挑战第23天】在Web前端开发中,数组是JavaScript中最常用的数据结构之一,掌握高效的数组迭代方法至关重要。本文详细介绍了多种数组迭代技巧:从基础的`for`循环到ES6的`for...of`循环,再到高阶方法如`forEach`、`map`、`filter`、`reduce`及`some`/`every`等。这些方法不仅能提高代码的可读性和维护性,还能有效优化程序性能。通过具体的示例代码,帮助开发者更好地理解和运用这些迭代技术。
26 0
|
4月前
|
缓存 前端开发 jenkins
Serverless 应用引擎产品使用合集之前端的项目部署在镜像里时,页面总是自动刷新,是什么导致的
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
21天前
|
前端开发
【前端web入门第五天】03 清除默认样式与外边距问题【附综合案例产品卡片与新闻列表】
本文档详细介绍了CSS中清除默认样式的方法,包括清除内外边距、列表项目符号等;探讨了外边距的合并与塌陷问题及其解决策略;讲解了行内元素垂直边距的处理技巧;并介绍了圆角与盒子阴影效果的实现方法。最后通过产品卡片和新闻列表两个综合案例,展示了所学知识的实际应用。
30 11
|
2月前
|
机器学习/深度学习 分布式计算 前端开发
构建前端防腐策略问题之前端代码会随着技术引擎的迭代而腐烂的问题如何解决
构建前端防腐策略问题之前端代码会随着技术引擎的迭代而腐烂的问题如何解决
|
3月前
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(4)--- 获取后端数据及产品信息页面的处理
循序渐进VUE+Element 前端应用开发(4)--- 获取后端数据及产品信息页面的处理
|
3月前
|
人工智能 关系型数据库 分布式数据库
PolarDB产品使用问题之如何将自有BI系统接入NL2BI的Web前端
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
敏捷开发 缓存 前端开发
阿里云云效产品使用问题之流水线构建前端项目比较慢。该如何优化
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
4月前
|
前端开发 Java Serverless
阿里云云效产品使用问题之前端流水线部署时,在构建环节,编译和打包要分开还是放在一起
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
4月前
|
前端开发 程序员 API
视觉智能开放平台产品使用合集之web前端拉起人脸识别该如何操作
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
5月前
|
前端开发 JavaScript 开发者
【Web 前端】数组迭代的方法有哪些?
【4月更文挑战第22天】【Web 前端】数组迭代的方法有哪些?
下一篇
无影云桌面