Shepherd.js — это библиотека для создания интерактивных пошаговых туров по интерфейсу веб-приложений. A/B тестирование в контексте Shepherd.js позволяет оптимизировать пользовательский опыт, сравнивая различные варианты туров и выявляя наиболее эффективные. Основная цель A/B тестирования — определить, какой тур способствует лучшему вовлечению пользователей, удержанию или выполнению целевых действий.
Для проведения A/B теста необходимо разделить пользователей на группы. Обычно используют случайное распределение, обеспечивающее статистическую достоверность. Важно сохранять распределение на уровне сессии пользователя, чтобы один и тот же пользователь не попадал в разные варианты туров.
Пример случайного распределения:
function assignVariant(userId) {
return (userId % 2 === 0) ? 'variantA' : 'variantB';
}
Здесь userId — уникальный идентификатор пользователя, а
variantA и variantB — два разных варианта
туров.
Каждый вариант тура может отличаться: количеством шагов, стилем подсказок, позиционированием элементов, текстом инструкций. Shepherd.js позволяет создавать отдельные экземпляры туров с различными конфигурациями:
import Shepherd from 'shepherd.js';
const tourVariantA = new Shepherd.Tour({
defaultStepOptions: {
scrollTo: true,
cancelIcon: { enabled: true }
}
});
tourVariantA.addStep({
id: 'step1',
text: 'Добро пожаловать в приложение!',
attachTo: { element: '#dashboard', on: 'bottom' },
buttons: [
{ text: 'Далее', action: tourVariantA.next }
]
});
const tourVariantB = new Shepherd.Tour({
defaultStepOptions: {
scrollTo: true,
cancelIcon: { enabled: true },
classes: 'custom-theme'
}
});
tourVariantB.addStep({
id: 'step1',
text: 'Привет! Мы покажем основные функции.',
attachTo: { element: '#dashboard', on: 'top' },
buttons: [
{ text: 'Следующий шаг', action: tourVariantB.next }
]
});
Различия между турами могут быть тонкими (например, текст кнопок) или глобальными (разное количество шагов или позиции подсказок).
Для анализа эффективности каждого варианта необходимо отслеживать поведение пользователей. Shepherd.js предоставляет события, которые можно использовать для логирования:
tourVariantA.on('complete', () => {
logTourResult('variantA', 'complete');
});
tourVariantA.on('cancel', () => {
logTourResult('variantA', 'cancel');
});
function logTourResult(variant, result) {
fetch('/api/log-tour', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ variant, result, timestamp: Date.now() })
});
}
Можно отслеживать также прохождение каждого шага, время на шаг и взаимодействие с кнопками.
Ключевые метрики для A/B тестирования туров включают:
На основе этих данных можно определить, какой вариант лучше справляется с поставленной целью.
В продакшн-приложениях часто требуется загружать только необходимый вариант тура. Это снижает нагрузку на фронтенд и позволяет менять тур без перезапуска приложения:
const variant = assignVariant(currentUser.id);
import(`./tours/${variant}.js`).then(module => {
const tour = module.default;
tour.start();
});
Такой подход обеспечивает гибкость и масштабируемость A/B тестирования.
Для более точного контроля над распределением пользователей можно реализовать серверную логику, которая возвращает пользователю конкретный вариант тура. Это позволяет гарантировать равномерное распределение и учет кросс-сессий:
fetch('/api/get-tour-variant')
.then(response => response.json())
.then(data => {
import(`./tours/${data.variant}.js`).then(module => {
module.default.start();
});
});
Для A/B тестирования полезно интегрировать Shepherd.js с Google Analytics, Mixpanel или внутренними системами аналитики. Каждое событие Shepherd.js можно преобразовать в событие аналитики:
tourVariantA.on('show', (step) => {
analytics.track('tour_step_shown', { stepId: step.id, variant: 'A' });
});
tourVariantA.on('complete', () => {
analytics.track('tour_completed', { variant: 'A' });
});
Это позволяет строить отчеты и визуализировать эффективность каждого варианта туров.
Такой подход обеспечивает систематическое улучшение пользовательского опыта и позволяет использовать Shepherd.js не только как инструмент обучения, но и как инструмент оптимизации интерфейса через данные A/B тестирования.