Изменения сайта должны работать быстро, минимизируя любые потенциальные задержки и мерцания.
Поэтому:
Существенно переписали инфраструктуру так, чтобы исключить один технический запрос во время первого захода пользователя. Открытие первой страницы пользователем - важно, каждые 50-70 мсек - критичны.
Улучшили многие вещи внутри, чтобы не иметь задержки ответа даже в минуты самых пиковых нагрузок. Теперь время выполнения метода персонализации - это почти полностью время хождения сигнала до ЦОДа и обратно, даже когда мы имеем много тысяч запросов в секунду, а каждый их них - это десятки ML персонализаций.
Предиктивное кеширование персонализаций, A/B тестов и действий по правилам в браузере пользователя. Все что было выше - согласитесь, неплохо. Но еще лучше то, что в 99% случаев мы вообще не будем ждать ответа сервера, а будем сразу же применять нужные нам изменения.
Как это работает:
- Мы анализируем условия срабатывания персонализации, теста или действия по правилам. Анализируем каждый их вариантов и его условия срабатывания. Анализируем все действия разных вариантов.
- Исходя из этого вычисляем основные узлы графа зависимостей - насколько они постоянные или изменчивые, и пониманием можем ли мы кешировать на стороне браузера пользователя и если да, то в рамках какой границы.
Далее наша клиентская библиотека проверяет на своей стороне - если всё для использования "предвычисления" подхходит, то гипотезу можно применять моментально, вовсе не дожидаясь ответа сервера. Вторая важная часть магии - низкоуровневая работа на уровне браузера, когда мы по мере разбора DOMа мы сразу меняем его, не давая проявиться мерцанию.
Важно:
- Мы не блокируем основной поток, то есть дольше ничего грузиться не будет
- Нагрузка на браузер пользователя почти нулевая
- React и Vue поддерживаются из коробки
Раскатка механизма будет происходить на все проекты в течение недели. Каждый будем проверять руками перед включением.
Оригинал статьи опубликован на t.me
