За 4 годы сотрудничества мы решили несколько сложных задач по оптимизации работы высоконагруженного сайта клиента. Внедрили заказы комплектов из PDF-каталога типовых решений, улучшили поиск по сайту и ускорили расчет срока и стоимости доставки
Компания «ТД ТИНКО» — дистрибьютор российских и зарубежных брендов оборудования систем безопасности. Компания поставляет оборудование по всей России. В 2021 году ее клиентами были 25 000 организаций. Каждый день на сайт заходят ≈ 40 000 человек, чтобы выбрать оборудование из 32 000 номенклатурных позиций.
«ТД ТИНКО» разработал для клиентов комплекты готовых решений, однако заказать их можно было только по телефону. Другой проблемой был поиск по сайту. Существующее решение хорошо работало на небольших и средних базах данных, однако на высоконагруженном сайте «ТД ТИНКО» давало сбои. Еще одной проблемой был расчет доставки — расчет по пяти ТК занимал слишком много времени.
1. Внедрить на сайт заказы комплектов из PDF-каталога типовых решений
2. Перенести поиск по сайту на поисковую систему Elasticsearch
3. Настроить расчет доставки так, чтобы клиент видел стоимость и срок поставки сразу по всем транспортным компаниям
1С-Битрикс, Vue, ElasticSearch.
Задача 1. Внедрить на сайт заказы комплектов из PDF-каталога типовых решений
Системы безопасности — это технически сложные решения, их подбор и инсталляция требуют высокой квалификации. В помощь своим клиентам «ТД ТИНКО» раз в год выпускает журнал с типовыми решениями. Каждое решение содержит комплект оборудования под определенную задачу, например, устройство системы видеонаблюдения магазина. Проектировщики, интеграторы и монтажные организации используют эти решения для создания систем безопасности.
Типовое решение системы видеонаблюдения для магазина.
Проблема была в том, что типовые решения находились в журнале в PDF-формате. По ним не было поиска на сайте, а комплект оборудования из решения невозможно было добавить в корзину покупателя. Типовые комплекты существовали только в базе 1С, поэтому клиентам приходилось звонить в офис и оформлять заказ по телефону. Это было неудобно и отнимало время у клиентов и сотрудников «ТД ТИНКО».
Необходимо было реализовать на сайте поиск и покупку комплектов оборудования из журнала.
Технически задача выглядела так:
Спроектировать обмен, чтобы специалисты по 1С могли выполнить работу по формированию файлов выгрузки для сайта.
Запрограммировать импорт типовых решений на стороне сайта.
Доработать обмен заказами, дополнив выгрузку типовыми решениями.
Запрограммировать на сайте разделы и механизмы, которые позволят покупать новый вид товаров.
Сайт «ТД ТИНКО» работает на 1С-Битрикс. И в 1С и в Битриксе есть понятие комплекта. При этом обе системы понимают под этим одно и то же — товар, который для пользователя выглядит одним товаром, а для учетной системы — несколькими. Проблема в том, что 1С и Битрикс не умеют обмениваться этими данными. Стандартные модули обмена в этих системах не поддерживают выгрузку комплектов на сайт. Нам нужно было разработать модуль на основе XML-выгрузки силами своей команды. Что мы и сделали.
Теперь стала доступна выгрузка из 1С на сайт всей информацию о типовых решениях:
описания;
изображения;
свойства для фильтрации;
мета-информация для редактора типовых решений.
Данные из XML-файлов импортируются в инфоблоки, аналогично прочим товарам. У типовых решений есть свойства, цены, перечень оборудования и вспомогательная мета-информация. Программа 1С ежедневно формирует XML-файл с типовыми решениями. На сайте есть CRON-задача, которая проверяет наличие файла и по FTP загружает его на сайт.
Типовое решение, готовое для заказа.
Клиенты «ТД ТИНКО» не всегда оформляют заказы на сайте. Они могут сделать это в офисе или по телефону. Чтобы такие заказы отображались в личных кабинетах на сайте, мы запрограммировали импорт заказов, созданных офлайн на стороне 1С. Эти заказы отображаются на сайте в режиме «только для чтения». Пользователь видит ход выполнения заказа, но не может внести в него изменения.
Для удобства пользователей все решения на сайте разбиты под сферы применения:
Страница сайта с типовыми решениями под разные задачи.
На странице каждого типового решения есть схема и состав комплекта оборудования с указанием цены как всего комплекта, так и каждой единицы оборудования.
Выбор типового решения.
Пользователь может изменить количество оборудования в соответствии со своей задачей и оценить изменение стоимости проекта. Однако из комплекта нельзя удалить элементы, на которых основано типовое решение.
Изменение состава типового решения.
Проект мы делали в 2018 году, сейчас работаем над другими задачами. Количество затраченных часов за 2021 год — 1746, или 150 часов ежемесячно.
На старой версии сайта поиск был реализован через самописные запросы к базе данных. Решение было создано на MySQL и отлично работало на небольших и средних базах данных. Однако у компании «ТД ТИНКО» высоконагруженный сайт: объемы данных и количество поисковых запросов постоянно увеличиваются. MySQL не предназначен для таких задач. Он часто вел себя непредсказуемо из-за множества одновременных запросов к базе. Для поиска товара в большой номенклатуре со сложной логикой нужно было другое решение.
Для оптимизации поиска мы предложили внедрить Elasticsearch. Это одна из самых популярных поисковых систем. Elasticsearch — масштабируемая утилита полнотекстового поиска и аналитики. Она в режиме реального времени хранит, ищет и анализирует большие объемы данных. В отличие от решения на MySQL, Elasticsearch быстро и легко находит товары, написанные с опечатками или в других формах.
Такое время отклика позволяет на лету и без видимых задержек перестраивать выдачу, пока пользователь вводит запрос.
Индекс актуализируется за 20 секунд, а добавление товара в индекс занимает 0,3 секунды.
А также расширили функциональные возможности поиска и добавили:
слово;
артикул;
фраза;
Задача 3. Настроить расчет доставки так, чтобы клиент видел стоимость и срок поставки сразу по всем транспортным компаниям
Компания «ТД ТИНКО» работает с пятью ТК. При заказе пользователь отправляет запрос, а каждая ТК делает свой расчет. Время расчета у всех компаний разное, поэтому результат по всем ТК в среднем занимает одну минуту. По меркам пользователей, минута ожидания — это вечность. Нужно было оптимизировать и ускорить процесс расчета.
Мы изучили документацию API пяти служб доставки и все нюансы обмена информацией. Запрос пользователя с сайта отправляется одновременно в пять ТК, а ответы обрабатываются параллельно. Время обработки ответа от каждой ТК мы ограничили 30 секундами. Если за этот период ответ от какой-либо ТК не пришел, то пользователь увидит только 4 результата. Выберет ТК из текущего списка и быстрее оформит заказ.
Для определения адресов мы используем сервисы КЛАДР и ФИАС, а для удобства пользователей подключили сервис подсказок DaData. Он выдает подсказки по отдельным частям адреса и упрощает поиск.
Покупатель начинает вводить адрес, а сервис DaData помогает найти его быстрее. Запросы и обработка ответов выполняются параллельно, поэтому через несколько секунд пользователь увидит результаты. Время обработки запроса не превышает 30 секунд. У покупателя будет положительный пользовательский опыт: он быстро выберет службу доставки и оформит заказ.