Разделитель аудитории для ABC[DEF...Z] тестирования различных сервисов для интернет-магазинов.
Особенности:
- Делит аудиторию на ровное количество частей - не случайным образом, а цикличным перебором: первый посетитель будет в сегменте A, второй в сегменте B, и так далее. Таким образом аудитория гарантировано будет разделена на равные части.
- Поддерживает до 24 сегментов.
- Распознает попытку подменить сегмент пользователя (мошенничество с целью перекинуть ) и гарантирует, что выданный пользователю сегмент не будет изменен.
- Позволяет проводить одновременно несколько экпериментов: пользователь будет в разных сегментах для разных экспериментов.
Важно: библиотека делает синхронный AJAX-запрос для упрощения ее использования на сайте. Время ответа сервера сегментации не более 20ms, поэтому операция не замедлит работу вашего сайта.
Скачать и положить на сервер файл
r46_splitter.js
На всех страницах сайта в секцию <head>
разместить код:
<head>
...
<script src="r46_splitter.js"></script>
<script>
// Идентификатор магазина. Можно получить в личном кабинете REES46.com после регистрации.
var shop_key = 'o87ahlgj2ptghylutskljhg68';
// Имя эксперимента - любой набор латинских букв и цифр без пробелов и знаков пунктуации
var experiment = 'recommendations';
// Максимальное число сегментов
var total_segments = 3;
// Получаем сегмент
var segment = r46_splitter(shop_key, experiment, total_segments, function(segment) {
// Используем сегмент
if(segment == 'A') {
// Исполняем код для сегмента А
} else if (segment == 'B') {
// Исполняем код для сегмента B
} else if (segment == 'C') {
// Исполняем код для сегмента C
} else {
// Возникла проблема на канале связи, поэтому сегмент рассчитать не удалось
// Можно использовать любой интересующий код.
}
});
</script>
...
</head>
Синхронные запросы? Вы что, это же замедлит наш сайт!
Сервис высокоскоростной. Тестирование сервиса на сервере за $50 дало следующий результат: 50000 запросов, 1000 конкурирущих, среднее время ответа: 15ms.
На всех страницах сайта в секцию <head>
разместить код:
<head>
...
<script src="r46_splitter.js"></script>
<script>
// Идентификатор магазина. Можно получить в личном кабинете REES46.com после регистрации.
var shop_key = 'o87ahlgj2ptghylutskljhg68';
// Имя эксперимента - любой набор латинских букв и цифр без пробелов и знаков пунктуации
var experiment = 'recommendations';
// Максимальное число сегментов
var total_segments = 3;
// Получаем сегмент
var segment = r46_splitter(shop_key, experiment, total_segments);
// Используем сегмент
if(segment == 'A') {
// Исполняем код для сегмента А
} else if (segment == 'B') {
// Исполняем код для сегмента B
} else if (segment == 'C') {
// Исполняем код для сегмента C
} else {
// Возникла проблема на канале связи, поэтому сегмент рассчитать не удалось
// Можно использовать любой интересующий код.
}
</script>
...
</head>
Вы можете использовать исходный код делителя на собственном сервере, если не доверяете нашему. Можете использовать любой домен, главное - не основной домен вашего сайта, чтобы исключить возможность подмены кук.
- Установить NGINX с поддержкой Lua >=5.1
Если версия ниже 1.9.11, если выше то переходим сразу к пункту 2:
cd /opt
apt-get source nginx
git clone https://github.com/openresty/lua-nginx-module.git
nginx -V
Копируем все от --prefix=/usr/share/nginx до первого --add-module, добавляем:
--add-module=/opt/lua-nginx-module --with-ld-opt="-L /usr/local/lib" --with-cc-opt="-I /usr/local/include"
И дальше модули по желанию
make
make install
mv /usr/share/nginx/sbin/nginx /usr/sbin/nginx
Перезагружаем nginx
- Ставим lua:
apt-get install lua5.1
Менеджер пакетов для lua:
apt-get install luarocks
luarocks install luasec
- Установить модуль https://github.com/nrk/redis-lua
luarocks install redis-lua
- Установить resty.jit-uuid
luarocks install lua-resty-jit-uuid
- Установить Redis 3x
Здесь и далее: используйте свой поддомен вместо split.rees46.com
- Создать поддомен split.rees46.com
- Создать в NGINX файл хоста. Пример содержимого: split.rees46.com.conf
- Положить в папку /etc/nginx файл split.lua
- Хост должен работать и с HTTP и с HTTPS
- Отключить любое кеширование GET-запросов в location делителя или на уровне DNS (Cloudflare)
- Перезапустить NGINX