Как улучшить пользовательский опыт на сайте сравнения цен
О клиенте
WeighMyRack — американская прайс-площадка, помогающая любителям скалолазания подобрать экипировку по выгодной цене. Клиенту требовалась команда с глубокой экспертизой в Drupal для сложного проекта, и как можно скорее — разработчики из команды поддержки сайта решили закрыть своё агентство.
Задача
Перед нами стояла задача настроить импорт данных о товарах из 10 онлайн-магазинов, сделать рефакторинг кода, обновить ядро CMS, устранить баги из имеющейся функциональности, улучшить производительность сайта и интерфейс.
Решение
Добавление новых фильтров
Главная задача сайта — это помочь пользователю найти нужный товар по выгодной цене. Для этого на страницах с категориями товаров работает поиск, в котором можно настроить фильтрацию по бренду, цене, цвету, форме, размеру, весу, полученных наградах и скидках; без гибкой системы поиска, как и без многого другого, немыслим ни один сайт электронной коммерции. С помощью Drupal-модуля Facet API мы сделали в поиске несколько новых фильтров: по стране магазина, который продает товар, скидкам и т. п. Эта информация содержится в .csv или .txt-файлах, которые обновляются раз в день.

Рефакторинг кода
Мы нашли контрибные модули и темы с кусками кастомного кода. Это создаёт ситуацию, в которой важная функциональность могла перестать работать после обновления модуля. Мы почистили модули от неправильного кода ровно настолько, чтобы можно было обновить сайт и не разрабатывать его с нуля.
Сохранение данных
Данные на сайт приходят с серверов main и sync. На сервере main администратор сайта создаёт страницы с товарами и поддерживает их в актуальном виде; сервер sync работает импортом данных о товарах. Оба сервера меняют базу данных. Эти изменения нужно было регулярно сохранять и иметь возможность вернуть данные 12-часовой давности при отказе сайта. Для этого мы написали скрипт, который делает ежедневные бэкапы данных перед началом очередного импорта и записывает их в бэкап-хранилище на удалённом сервере с отладочным сайтом.
Ускорение обновления данных
Площадка начала свою работу с двух магазинов получала данные из двух интернет-магазинов, и на импортирование уходило 3-5 часов. При подключении ещё нескольких ритейлеров время увеличилось до 24 часов. Чтобы данные обновлялись быстрее, мы настроили параллельную обработку фидов вместо последовательной.

Защита от DDoS-атак
Чтобы сайт продолжил нормальную работу после DDoS-атаки, мы установили систему мониторинга и возобновления процессов Monit. Система позволяет перезапускать процессы и сервисы спустя 3 минуты после того, как MySQL, Apache или httpd перестанут отвечать — удобно, если DDoS-атака производится ночью.
Ускорение загрузки сайта
После оптимизации сервера, подключения агрегации css/js и использования технологии Lazy Load для особо тяжелых страниц сайт стал загружаться и откликаться в разы быстрее прежнего.
Результаты
- Подключено более 10 дополнительных онлайн-магазинов
- Время на обновление данных сокращено в два раза
- На момент публикации кейса сайт занимает 51 место в категории «Виды спорта > Скалолазание» по данным SimilarWeb.
Мы сохраняем с клиентом отношения, разрабатываем новую функциональность и поддерживаем сайт.
Сайт клиента: weighmyrack.com