ntpages/laravel-taster

此包已被弃用且不再维护。未建议替代包。

Laravel A/B 测试包

dev-master 2021-07-06 12:06 UTC

This package is auto-updated.

Last update: 2023-04-06 15:58:03 UTC


README

如果你正在为你的 Laravel 应用程序开发新功能或只是想知道哪种做法更好,这个包绝对适合你!

第一步

  1. 安装包
    composer require ntpages/laravel-taster
  2. 注册服务提供者
    Ntpages\LaravelTaster\Provider::classconfig/app.php
  3. 运行迁移
    php artisan migrate
  4. 发布包文件
    php artisan vendor:publish

结构

包的逻辑基于三个模型:实验、变体和交互。它们都存储在数据库中,表前缀为 tsr_。所有三个模型都有一个唯一的键和名称,以便在代码或用户界面中轻松识别。

实验

这是一个单元,用于分组不同类型的变体,以便轻松地在它们之间分割流量和统计信息。变体几乎不依赖于它,这意味着如果你正在构建一个可以创建/删除实验的用户界面,删除一个实验会清除所有相关数据。

变体

它是一个表示实验中一种查看方式的实例。需要注意的是 portion 属性。它代表应到达变体的访问者的近似百分比。因此,你可以在一个实验中拥有尽可能多的变体,只要它们的份额总和为 1,即访问者的总数量。

为了避免在存在份额时丢失任何实验数据,会创建一个默认变体。

交互

这是帮助跟踪和比较实验变体性能的最简单单元。

使用方法

在本节中,您将看到可以使用此包的不同方法。

内置辅助函数

此包提供了一组函数,用于配置和跟踪您的实验。

前端

这是最常用的使用方法。使用以下结构,您可以确保它按预期工作,您只需知道当前启用的实验及其变体的键即可。

@experiment('pet-preferences')

    @variant('no-pet')
        <a href="/get-a-pet.html">How to have a pet</a>
    @endvariant

    @variant('cat-lover')
        <a href="/funny-cats.html">This cats are smashing the day</a>
    @endvariant

    @variant('dog-lover')
        <a href="/lovely-dogs.html">Dogs are better than humans</a>
    @endvariant

@endexperiment

如何跟踪交互?
只需将所需属性添加到您想要跟踪的元素中,并包含 JavaScript 资产即可。

重要提示:这些辅助函数只能在 @variant blade 指令内部使用。

当使用 tsrAttrs 辅助函数时,您需要添加包的 JavaScript。您可以选择任何方式完成此操作,但推荐的方式是延迟脚本加载。

<script defer async src="{{ asset('vendor/tsr/taster.js') }}"></script>

关于tsrAttrs辅助工具的另一个重要点是,你始终需要一个HTML元素,所以如果你没有,就创建一个空的div。请记住,在这种情况下唯一有意义的操作是view

@experiment('expertiment-1')

   {{-- other variants --}}

    @variant('variant-1')
        <a href="/page.html" {{ tsrAttrs('click-intent', 'hover') }}>Page</a>
    @endvariant

@endexperiment

在HTML中,当标签有自己的浏览器执行的操作时,存在一些特殊情况。为此,只需使用额外的包装器。

<a href="some-page.html">
   <span {{ tsrAttrs('click-page', 'click') }}>
      Login
   </span>
</a>

该软件包还提供了在需要时生成交互URL的可能性。

@experiment('expertiment-1')

   {{-- other variants --}}

    @variant('variant-1')
        <a href="/page.html">Page</a>
        <script>
            const interactionUrl = '{{ tsrUrl('interaction-key') }}';
            // do something with that URL
        </script>
    @endvariant

@endexperiment

从PHP内部

有时你可以在后端捕获交互。这样做始终是一个好主意,因为这样你就不必在前端上通过软件包加载额外的javascript。为此,你可以通过使用app()辅助工具或依赖注入技术,直接在Laravel应用程序中访问到TasterService

use Illuminate\Support\Facades\Log;

use Ntpages\LaravelTaster\Exceptions\AbstractTasterException;
use Ntpages\LaravelTaster\Services\TasterService;

class FooController
{
    public function barAction(TasterService $taster)
    {
        try {
            // interaction for whatever variant user sees
            $taster->record('experiment-key', 'interaction-1-key');

            // granular settings depending on variant
            $taster->record('experiment-key', [
                'variant-1-key' => 'interaction-1-key',
                'variant-2-key' => [
                    'interaction-1-key',
                    'interaction-2-key'
                ]
            ]);
        } catch (AbstractTasterException $e) {
            Log::error('Taster says: ' . $e->getMessage());
        }

        return view('foo.bar');
    }
}