Интеграции с внешними сервисами постоянно развиваются. Службы доставки открывают новые пункты выдачи, платёжные системы обновляют API, а CRM получают дополнительный функционал. Иногда такие изменения требуют доработки интернет-магазина.
Именно с такой ситуацией мы столкнулись после обновления Dalli. Количество доступных пунктов выдачи значительно выросло, и это повлияло на скорость оформления заказа.
Подобные задачи показывают, почему после запуска проекта остаётся востребованной техническая поддержка сайта. Даже при стабильной работе магазина изменения во внешних сервисах со временем могут потребовать оптимизации интеграций.
В чём заключалась проблема

При каждом выборе доставки система заново запрашивала у Dalli полный список точек и обрабатывала все 4700 пунктов выдачи синхронно, в рамках одного запроса чекаута. На момент обращения только для Москвы API возвращал около 4700 ПВЗ.
Каждый запрос повторял один и тот же сценарий: получение полного списка точек; синхронная обработка всех данных на сервере; подготовка информации для карты; сохранение всего списка в пользовательской сессии. Пока пунктов выдачи было меньше, алгоритм работал без заметных ограничений. После расширения сети объём данных вырос настолько, что нагрузка на сервер резко увеличилась.
В результате карта открывалась заметно медленнее; оформление заказа занимало больше времени; возрастало потребление памяти; в отдельных случаях происходило превышение memory_limit, и карта могла не отображаться. Проблема была связана не с работой Dalli, а с тем, что прежняя логика интеграции перестала соответствовать новому объёму данных.
Почему подобные ситуации возникают

При запуске интернет-магазина невозможно заранее учесть все изменения, которые произойдут через месяцы или годы. Растут каталоги, появляются новые регионы доставки, расширяются возможности внешних сервисов.
Поэтому регулярная поддержка интернет сайтов позволяет своевременно адаптировать решения к новым условиям, не дожидаясь ошибок или снижения производительности.
Как мы решили проблему
Вместо временных решений мы изменили сам подход к интеграции.
Раньше список запрашивался у Dalli при каждом выборе доставки и сохранялся в сессии покупателя. Мы реализовали файловый кэш, который формируется отдельно для каждого города. Кэш теперь привязан к городу, а не к сессии покупателя. Это принципиально важно. При первом обращении по городу система получает данные от Dalli и сохраняет их на 6 часов. Все последующие обращения используют кэш и больше не обращаются к API. Это существенно снизило нагрузку на сервер.
- Серверное кэширование списка ПВЗ
- Постепенная загрузка карты: сразу выводить несколько тысяч маркеров тяжело для браузера. Теперь карта сначала показывает компактную часть точек и открывается практически мгновенно, а остальные подгружаются в фоне порциями.
- Защита от повторной обработки данных: добавили проверку - при повторном открытии карты уже загруженные точки не обрабатываются заново. Карта остаётся лёгкой при любом количестве открытий.
Какой результат получил клиент
