基于JS的AB测试方案

客户端的AB测试一直蛮恶心的,基本都是要预置代码、if-else入侵原有逻辑、发版前把所有测试方案都想好,新增只能发版。
当然,像RN这种究极方案解决一切由客户端逻辑不能修改带来的问题,还有一个更加简单的方法:基于JS引擎+JS下发的AB测试。

  1. 要在APP中内置一个JS引擎,J2V8蛮不错的,还有一些其他。目前来看,都比较容易集成。

  2. 定义一个interface作为为AB测试预留的坑。这个interface可大可小,可以是个StringGetter,也可以是整个presenter。JS和native的交互基于这个interface。

  3. native层使用Proxy将interface的所有逻辑都代理给JS。这里面包含着一个从interface到JS文件的映射关系,可以全APP只有一个js文件,也可以用class name映射。
  4. AB测试服务端不再下发测试参数,而是下发实验逻辑(一个command或者是整个页面逻辑)。再也没有奇葩的if-else,不发版能够测试的内容也更加灵活了(当然不如RN)。

核心代码只有十行:

class JSInvocationHandler implements InvocationHandler {
    private V8 mEngine = V8.createV8Runtime();
    private StringBuilder mBuilder = new StringBuilder();
    private Gson mGson = new Gson();

    @Override
    public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
      if (method.getName().equals("dispose")) {
        mEngine.release();
        return null;
      }
      mBuilder.delete(0, mBuilder.length());
      mBuilder.append(method.getName()).append("(").append(mGson.toJson(objects)).append(")");
      return mEngine.executeScript(mBuilder.substring(0));
    }
  }

寥寥几行,了了我几年的心结。舒爽。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值