Изменения сайта должны работать быстро, минимизируя любые потенциальные задержки и мерцания.

Поэтому:

  1. Существенно переписали инфраструктуру так, чтобы исключить один технический запрос во время первого захода пользователя. Открытие первой страницы пользователем - важно, каждые 50-70 мсек - критичны.

  2. Улучшили многие вещи внутри, чтобы не иметь задержки ответа даже в минуты самых пиковых нагрузок. Теперь время выполнения метода персонализации - это почти полностью время хождения сигнала до ЦОДа и обратно, даже когда мы имеем много тысяч запросов в секунду, а каждый их них - это десятки ML персонализаций.

  3. Предиктивное кеширование персонализаций, A/B тестов и действий по правилам в браузере пользователя. Все что было выше - согласитесь, неплохо. Но еще лучше то, что в 99% случаев мы вообще не будем ждать ответа сервера, а будем сразу же применять нужные нам изменения.

Как это работает:

  • Мы анализируем условия срабатывания персонализации, теста или действия по правилам. Анализируем каждый их вариантов и его условия срабатывания. Анализируем все действия разных вариантов.
  • Исходя из этого вычисляем основные узлы графа зависимостей - насколько они постоянные или изменчивые, и пониманием можем ли мы кешировать на стороне браузера пользователя и если да, то в рамках какой границы.

Далее наша клиентская библиотека проверяет на своей стороне - если всё для использования "предвычисления" подхходит, то гипотезу можно применять моментально, вовсе не дожидаясь ответа сервера. Вторая важная часть магии - низкоуровневая работа на уровне браузера, когда мы по мере разбора DOMа мы сразу меняем его, не давая проявиться мерцанию.

Важно:

  • Мы не блокируем основной поток, то есть дольше ничего грузиться не будет
  • Нагрузка на браузер пользователя почти нулевая
  • React и Vue поддерживаются из коробки

Раскатка механизма будет происходить на все проекты в течение недели. Каждый будем проверять руками перед включением.