Vue.js корзина для 1С-Битрикс с оптимистичными обновлениями

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Vue.js корзина для 1С-Битрикс с оптимистичными обновлениями
Средний
~1-2 недели
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1322
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    915
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    663
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    811
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    710
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1044

Разработка корзины на Vue.js для 1С-Битрикс

Стандартная корзина Битрикса sale.basket.basket при каждом изменении количества товара или его удалении выполняет полную перезагрузку страницы. На мобильных устройствах это выглядит как зависание: экран моргает, пользователь теряет контекст, конверсия падает на 20–30%. Мы сталкивались с этим в проекте интернет-магазина электроники с каталогом из 50 000 товаров — после внедрения Vue-корзины с оптимистичными обновлениями отказы на этапе корзины снизились вдвое.

Vue-корзина с Pinia store и optimistic updates устраняет эту проблему: визуально все изменения происходят мгновенно, а синхронизация с сервером выполняется асинхронно в фоновом режиме. Пользователь сразу видит обновлённую сумму и количество, не дожидаясь ответа от сервера. Если запрос завершился ошибкой — изменения автоматически откатываются. Такой подход даёт отзывчивость, сравнимую с приложениями класса SPA.

Почему стоит заменить стандартную корзину на Vue.js?

Основные причины — скорость отклика и минимальная загрузка данных. Стандартный компонент при каждом действии перерисовывает весь блок корзины, включая шапку и подвал. Vue-корзина обновляет только изменившийся элемент, используя виртуальный DOM. В тестах на каталоге из 10 000 товаров время реакции на добавление товара сократилось с 1.2 секунды до 200 миллисекунд — в 6 раз быстрее. Кроме того, снижается нагрузка на сервер: вместо полной перезагрузки корзины отправляется только один AJAX-запрос с изменённым полем.

Параметр Стандартная корзина Vue-корзина
Время отклика (добавление) 1.2 с 180 мс
Перезагрузка страницы Да Нет
Обновление DOM Весь блок Только элемент
Отказы на этапе корзины 100% (база) снижение на 52%

Как интегрировать Vue-корзину с Битриксом?

Для синхронизации данных между фронтендом и бэкендом используется модуль sale. Основные методы:

// Добавить товар
$basket = \Bitrix\Sale\Basket::create(SITE_ID);
$item = $basket->createItem('catalog', $productId);
$item->setFields(['QUANTITY' => 1, 'CURRENCY' => 'RUB']);
$basket->save();

// AJAX-эндпоинты
POST /basket/add { productId, quantity, properties }
POST /basket/update { itemId, quantity }
POST /basket/remove { itemId }
GET  /basket — получить текущее состояние корзины

Также доступен REST API для облачных проектов: sale.basketitem.add, sale.basketitem.update, sale.basketitem.delete. Мы используем эти методы в связке с OAuth-авторизацией, что особенно удобно для мобильных приложений и headless-реализаций.

Архитектура Vue-компонентов корзины

Структура компонентов организована так, чтобы каждый модуль отвечал за свою часть UX:

CartApp.vue              — корневой компонент, инициализирует Pinia store
├── CartDrawer.vue       — боковая панель (slide-over) со списком товаров
├── CartIcon.vue         — иконка корзины в шапке с мгновенным счётчиком
├── CartItem.vue         — строка товара: фото, название, количество, цена, удаление
├── CartSummary.vue      — итоговая сумма, промокод, кнопка "Оформить"
└── EmptyCart.vue        — заглушка с предложением вернуться к покупкам

Использование Pinia store гарантирует, что состояние корзины хранится в одном месте и доступно из любого компонента без пропсов:

export const useCartStore = defineStore('cart', {
    state: () => ({
        items: [],
        totalPrice: 0,
        discounts: [],
        isLoading: false,
    }),
    getters: {
        itemCount: (state) => state.items.reduce((sum, i) => sum + i.quantity, 0),
    },
    actions: {
        async addItem(productId, quantity = 1) {
            // optimistic update
            this.items.push({ productId, quantity, pending: true });
            try {
                const result = await cartApi.add(productId, quantity);
                this.syncFromServer(result.basket);
            } catch {
                this.items = this.items.filter(i => !i.pending);
            }
        }
    }
});

Как синхронизировать корзину между вкладками?

Распространённая проблема: пользователь открыл магазин в двух вкладках, добавил товар в одной — корзина в другой устарела. Решаем её с помощью BroadcastChannel API:

const channel = new BroadcastChannel('cart-sync');
channel.onmessage = (e) => {
    if (e.data.type === 'CART_UPDATED') cartStore.fetchCart();
};
// При каждом изменении корзины:
channel.postMessage({ type: 'CART_UPDATED' });

Этот механизм поддерживается всеми современными браузерами и не требует дополнительных библиотек. Альтернативный подход — использовать localStorage с событием storage, но BroadcastChannel более надёжен и быстрее.

Кейс из практики: магазин электроники с каталогом 50 000 товаров

Клиент жаловался на низкую конверсию на мобильных устройствах: 40% пользователей закрывали корзину после первого добавления товара из-за задержек. Стандартный компонент Битрикс при каждом добавлении перезагружал блок корзины в шапке, что на среднем смартфоне приводило к видимой задержке 1–2 секунды. Мы реализовали Vue-корзину с CartIcon (счётчик обновляется мгновенно через Pinia) и CartDrawer (slide-over без перезагрузки). После внедрения:

  • Время отклика при добавлении товара снизилось с 1.2 с до 180 мс (в 6,7 раза).
  • Отказы на этапе корзины уменьшились на 52%.
  • Конверсия в оформление заказа выросла на 18%.

Код был покрыт unit-тестами на Vitest, что позволило быстро вносить изменения без риска сломать существующую логику.

Что входит в работу?

  1. Анализ текущей реализации корзины и выявление узких мест.
  2. Проектирование архитектуры Vue-компонентов и Pinia store.
  3. Разработка API-эндпоинтов на стороне Битрикс (PHP).
  4. Интеграция фронтенда с бэкендом через AJAX или REST.
  5. Написание unit-тестов и интеграционных тестов.
  6. Документация по использованию и настройке компонентов.
  7. Обучение команды поддержке и доработкам.

Сроки выполнения

Вариант реализации Срок
Корзина-drawer с базовыми операциями (добавление, удаление, изменение количества) от 4 до 6 рабочих дней
С промокодами, скидками и сохранёнными списками от 8 до 12 рабочих дней
Полная интеграция с Vue-каталогом и оформлением заказа +3–5 рабочих дней
Дополнительно: подготовка документации и обучение +1–2 рабочих дня

Стоимость рассчитывается индивидуально после анализа вашего проекта. Получите консультацию — свяжитесь с нами, чтобы обсудить детали и сроки. Мы предоставляем гарантию на все работы и обеспечиваем поддержку после запуска.

Почему стоит доверять разработку сертифицированным специалистам?

В нашей команде — сертифицированные разработчики Битрикс с опытом более 8 лет. Мы прошли десятки проектов с интеграцией Vue.js в экосистему 1С-Битрикс. Каждая реализация сопровождается полным циклом тестирования и код-ревью. Используем проверенные паттерны: Vue.js, Pinia, тегированное кэширование, модульное тестирование. Гарантируем, что корзина будет работать стабильно даже при высокой нагрузке. Закажите разработку сейчас и получите современную корзину, которая повысит конверсию вашего магазина.