ntpages / laravel-taster
Laravel A/B 测试包
Requires
- php: ^7.4
- ext-json: *
- laravel/framework: ^v8.0
This package is auto-updated.
Last update: 2023-04-06 15:58:03 UTC
README
如果你正在为你的 Laravel 应用程序开发新功能或只是想知道哪种做法更好,这个包绝对适合你!
第一步
- 安装包
composer require ntpages/laravel-taster
- 注册服务提供者
Ntpages\LaravelTaster\Provider::class
在config/app.php
- 运行迁移
php artisan migrate
- 发布包文件
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'); } }