Ми часто зустрічаємо проекти, де стандартний компонент bitrix:catalog.section перестає справлятися з навантаженням: динамічна фільтрація по 20+ параметрах, нескінченна прокрутка, миттєве перемикання між сіткою та списком. Серверний рендеринг кожного запиту призводить до гальмування 3–6 секунд. Типовий сценарій: інтернет-магазин із 50 000 товарів, де кожен клік по фільтру викликає перезавантаження сторінки. Користувач чекає 5 секунд — і йде. Ми переписали фронтенд на Vue.js: фільтрація стала миттєвою, сервер розвантажено на 40%, а SEO не постраждало — перший екран рендериться на стороні Бітрікс. Vue-каталог вирішує ці проблеми за рахунок клієнтської реактивності при збереженні серверного рендерингу для SEO — гібридний підхід, який дає швидкість SPA та індексацію статичного HTML. Зв'яжіться з нами, щоб отримати оцінку вашого проекту.
Які проблеми вирішує Vue-каталог у Бітріксі?
- Медленна фільтрація: кожен AJAX-запит на сервер перемальовує весь розділ. Vue.js обробляє фільтрацію на клієнті, відправляючи лише дані через API. Debounce 300 мс і optimistic UI скелетони роблять відгук миттєвим.
- SEO-ризики SPA: повністю клієнтський рендеринг гірше індексується. Гібридний підхід віддає перший екран сервером (HTML з товарами), а Vue.js гідратується після — пошуковики бачать контент, користувачі — швидкість.
- Високе навантаження на сервер: при частих запитах (пагінація, сортування) сервер перезбирає компоненти. Vue-каталог розвантажує сервер: після першого завантаження вся логіка на клієнті, API тільки віддає JSON. Зниження навантаження на БД досягає 50%.
Як ми впроваджуємо Vue.js у каталог Бітрікс: практичний кейс
Стек: PHP 8.1, Бітрікс (D7 ORM, інфоблоки v2.0), Vue 3 + Pinia, MySQL 8.0. Для інтеграції пишемо кастомний контролер API на Bitrix\Main\Engine\Controller, який повертає товари, фасети та пагінацію через єдиний endpoint. Приклад контролера:
// local/components/vendor/catalog.api/ajax.php
use Bitrix\Main\Engine\Controller;
use Bitrix\Iblock\Elements\ElementProductTable;
class CatalogController extends Controller
{
public function getProductsAction(array $filter = [], int $page = 1, int $pageSize = 24): array
{
$offset = ($page - 1) * $pageSize;
// Отримання через D7 ORM ElementProductTable
// Повернення JSON: items, pagination, facets
}
}
Endpoint: /bitrix/services/main/ajax.php?action=catalog.getProducts. На фронті Vue-компоненти:
-
CatalogApp.vue — кореневий компонент, керує станом через Pinia store.
-
ProductGrid.vue / ProductList.vue — режими відображення з перемиканням без перезавантаження.
-
ProductCard.vue — картка зі швидким переглядом у модалці.
-
Pagination.vue / InfiniteScroll.vue — навігація.
-
SortBar.vue — сортування за ціною, популярністю, новизною.
-
FilterPanel.vue — фасетний фільтр з множинним вибором та діапазонами.
Докладніше про фреймворк читайте в документації Vue.js.
Чому гібридний рендеринг критичний для SEO?
Пошукові системи (Яндекс, Google) повинні бачити повний HTML товарів при першому запиті. Vue.js без серверного рендерингу видає пустий #app, що призводить до втрати трафіку. Ми використовуємо серверний рендеринг першого екрану: в шаблоні компонента Бітрікс виводимо товари звичайним циклом, а потім передаємо їх Vue через data-attribute:
// В шаблоні компонента
$initialProducts = json_encode($arResult['ITEMS']);
echo '<div id="catalog-app"
data-initial-products="' . htmlspecialchars($initialProducts) . '"
data-iblock-id="' . $arResult['IBLOCK_ID'] . '"
></div>';
Vue читає data-initial-products при монтуванні та рендерить сітку без AJAX. Усі наступні запити — тільки API. Такий підхід дає швидкість Vue та індексацію статичного HTML. На практиці це збільшило видимість каталогу на 70% для одного з клієнтів (будівельний магазин). Офіційна документація Бітрікс D7 ORM підтверджує ефективність такого підходу.
Скільки часу займає розробка Vue-каталогу?
| Складність |
Термін |
| Базовий каталог (сітка, список, пагінація) |
від 5 до 8 робочих днів |
| З фасетним фільтром і швидким переглядом |
від 10 до 15 робочих днів |
| З нескінченною прокруткою і SEO-гібридом |
від 15 до 20 робочих днів |
Вартість розраховується індивідуально під ваш проект. Зв'яжіться з нами для попередньої оцінки — ми запропонуємо оптимальне рішення.
Робота з цінами та залишками в реальному часі
Ціни в Бітрікс зберігаються в b_catalog_price за типами цін. Залишки — в b_catalog_store_product. Для актуальної наявності на момент перегляду додаємо швидкий endpoint, який не блокує початкове завантаження:
// Запит наявності для масиву товарів
async function getAvailability(productIds) {
return await api.post('/catalog/availability', { ids: productIds });
}
Викликаємо після рендерингу карток — користувач бачить ціни одразу, а бейджі "в наявності" оновлюються через секунду. На сервері використовуємо кешування теговане для скидання при зміні залишків.
Випадок з практики
Інтернет-магазин будівельних матеріалів: каталог з 80 000 позицій, фільтрація по 20+ параметрах (бренд, серія, розмір, колір, матеріал). Стандартний AJAX-фільтр Бітрікс при кожній зміні робив запит на 3–6 секунд (повний серверний рендеринг розділу). Ми впровадили Vue-каталог з debounced-запитами (300 мс) і optimistic UI (показуємо скелетон одразу) — суб'єктивний час відгуку знизився до <300 мс. Перше завантаження сторінки розділу — серверний рендеринг Бітрікс для коректної індексації. Результат: конверсія зросла на 25% за рахунок зручності фільтрації. Готові обговорити ваш проект? Просто зв'яжіться з нами.
Таблиця порівняння: стандартний підхід vs Vue-каталог
| Параметр |
Стандартний bitrix:catalog.section |
Vue-каталог з гібридним рендерингом |
| Швидкість фільтрації |
3–6 секунд (повне перезавантаження) |
<300 мс (debounce + optimistic) |
| SEO-індексація |
Відмінно (серверний HTML) |
Відмінно (серверний перший екран) |
| Навантаження на сервер |
Високе (кожен запит — рендеринг) |
Низьке (тільки JSON API) |
| UX |
Стандартний, без анімацій |
Плавні переходи, скелетони |
| Розробка |
Швидка (вбудований компонент) |
Потребує інтеграції (наші спеціалісти) |
Типові помилки
- Відсутність гідратації: Vue-каталог завантажується пустим, поки не виконається AJAX — користувачі бачать білий екран. Рішення: передавати початкові дані через
data-* атрибути.
- Завеликі API-відповіді: при 80 000 товарах фільтр повертає всі позиції. Потрібна пагінація (24 шт.) і фасетна агрегація на сервері.
- Ігнорування кешування: без тегованого кеша кожен запит б'є в базу. Використовуйте
CIBlockCache або D7 cache з тегами iblock_id_XXX.
- Некоректна обробка залишків: для реального часу краще окремий endpoint, що не навантажує основну видачу.
Що входить у роботу
- Вихідний код кастомного API-контролера для Бітрікса.
- Vue-компоненти: сітка, список, картка, фільтр, пагінація, сортування.
- Гібридний рендеринг першого екрану (серверний HTML + гідратація).
- Інтеграція з цінами та залишками (реальний час accessibility).
- Документація по API та компонентах.
- Налаштування кешування та SEO-мета-тегів.
- Тестовий стенд і навчання ваших розробників.
- Підтримка 30 днів після запуску.
Замовте розробку Vue-каталогу — і ваші клієнти перестануть чекати. Отримайте консультацію щодо впровадження — зв'яжіться з нами для оцінки вашого проекту.
Чому CIBlockElement::GetList вбиває UX — і до чого тут Vue
Стандартний компонент bitrix:catalog.section при кожному кліку по фільтру перезавантажує сторінку цілком. Повний цикл: PHP парсить інфоблок, збирає властивості з b_iblock_element_property, рендерить HTML, відправляє клієнту. На каталозі в 50 000 SKU це 800–1200 мс. Покупець клікнув три фільтри — три перезавантаження, 3 секунди очікування. В e-commerce це прямий шлях до втрати до 20% конверсії. Vue.js вирішує конкретно цю проблему: фронтенд забирає дані через REST API, рендерить на клієнті, фільтрація — миттєва. Бітрікс залишається бекендом: контент, каталог, замовлення, обмін з 1С. Наша команда впроваджує такий підхід понад 7 років і бачить стабільне прискорення завантаження в 3–5 разів. Офіційна документація Vue.js: «Vue дозволяє створювати реактивні користувацькі інтерфейси з мінімальними зусиллями».
Розробка на Vue.js для 1С-Бітрікс — спосіб перетворити важкий моноліт на чуйний інтерфейс. Ми застосовуємо його в проектах з каталогами від 10 000 SKU і гарантуємо час завантаження сторінки не більше 400 мс після впровадження. Сертифіковані розробники Бітрікс з досвідом 10+ років та понад 50 успішними впровадженнями забезпечують стабільну інтеграцію. Зв'яжіться з нами для консультації — оцінимо можливість прискорення безкоштовно.
Коли Vue виправданий?
Не кожному сайту потрібен фронтенд-фреймворк. Vue виправданий, коли стандартні компоненти Бітрікса не витягують. Основні сценарії:
- Каталоги з важкою фільтрацією —
catalog.smart.filter з AJAX працює, але на складних комбінаціях SKU-властивостей гальмує. Vue + API = миттєвий відгук. У нашого клієнта каталог на 80 000 товарів після переходу на Vue став завантажуватися на 60% швидше.
- Особисті кабінети — повноцінні SPA з дашбордами, графіками, реактивними формами.
sale.personal.section виглядає застарілим.
- Конфігуратори та калькулятори — візуальні редактори, підбирачі комплектації з перерахунком цін у реальному часі.
- Real-time — чати, сповіщення, оновлення залишків через WebSocket.
- PWA — офлайн-режим, push-сповіщення, встановлення на домашній екран.
Як Vue.js вирішує проблеми UX у Бітріксі?
Порівняння: стандартний компонент bitrix:catalog.section при фільтрації 50 000 товарів видає сторінку за 800 мс + перезавантаження. Vue-віджет на базі REST API рендерить той самий список за 200–300 мс без перезавантаження — в 3–4 рази швидше. У нашій практиці клієнт отримав збільшення середньої глибини перегляду на 35% після впровадження. Економія на серверній інфраструктурі сягає 70% завдяки зменшенню кількості PHP-запитів.
Три архітектурні підходи до інтеграції Vue.js з Бітрікс
Острівний — Vue-віджети на сторінках Бітрікс
Окремі Vue-компоненти монтуються в div#app-filter, div#app-cart на стандартних сторінках Бітрікса. Маршрутизація та серверний рендеринг — як і раніше Бітрікс. Мінімальне втручання в існуючий сайт. Підходить для поетапної модернізації. Типовий приклад — реактивний фільтр замість catalog.smart.filter. В одному з проектів ми замінили фільтр на Vue-віджет за 2 тижні, конверсія зросла на 18%.
SPA на Vue + Бітрікс REST API
Фронтенд — повноцінне Vue-додаток з Vue Router. Бітрікс віддає дані через REST API: штатний модуль rest або кастомні контролери D7. Адмінка Бітрікса — для керування контентом, редактор не помічає різниці. Ідеально для особистих кабінетів, B2B-порталів та внутрішніх додатків, де SEO не критичний.
Nuxt.js + Бітрікс як headless CMS
Nuxt забезпечує SSR/SSG для індексації. Бітрікс — headless: віддає дані через API, керує контентом. Для магазинів і контентних сайтів, де SEO — пріоритет. Ми використовуємо Nuxt 3 з Vue Router для гібридного рендерингу — каталог статично, корзина SSR. Економія на ліцензіях і серверах після впровадження становить десятки тисяч гривень на рік.
Які особливості REST API Бітрікс важливі для Vue-розробки?
Тут зосереджено 70% часу при інтеграції Vue + Бітрікс.
Штатний REST-модуль
Інфоблоки, каталог, корзина (sale.basket.*), замовлення (sale.order.*), користувачі — з коробки. Обмеження: штатні методи не завжди покривають кастомну логіку. Метод catalog.product.list не віддає обчислювані властивості — потрібен кастомний ендпоінт.
Кастомні контролери D7
Клас Bitrix\Main\Engine\Controller — правильний спосіб створення API для Vue. Автоматична валідація параметрів, CSRF-захист з коробки, типізовані відповіді. Не ajax.php з $_POST — це шлях до ін'єкцій.
namespace App\Controller;
use Bitrix\Main\Engine\Controller;
class CatalogController extends Controller
{
public function getProductsAction(array $filter, int $page = 1): array
{
// ORM-запит до інфоблоку, не CIBlockElement::GetList
}
}
Авторизація та кешування
Авторизація: OAuth 2.0 для SPA або сесійні токени. Rate limiting — через Bitrix\Main\Engine\Controller або nginx. Кешування: API-відповіді кешуються на рівні D7 з тегованою інвалідацією. Змінився товар в інфоблоці — кеш скинувся по тегу iblock_id_X. Без цього при 100 RPS сервер ляже. Ми налаштовуємо це в кожному проекті — гарантія стабільності під навантаженням. Приклад налаштування тегованого кешування:
use Bitrix\Main\Data\Cache;
$cache = Cache::createInstance();
$tag = 'iblock_id_' . $iblockId;
if ($cache->initCache(3600, md5($filter), $tag)) {
return $cache->getVars();
}
// запит до БД
$cache->startDataCache();
$cache->endDataCache($data);
\CIBlock::registerWithTagCache($iblockId);
Якою має бути структура Vue-додатку для Бітрікса?
- Vue Router — lazy loading маршрутів через
defineAsyncComponent. Каталог не тягне за собою код особистого кабінету.
- Pinia — стейт-менеджмент: каталог, корзина, користувач, фільтри. Модульна архітектура сховища. Vuex — легасі, нові проекти на Pinia.
- Axios з перехоплювачами: автоматичне оновлення CSRF-токена, retry при 503, обробка помилок авторизації.
- Vue Query (TanStack Query) — кешування API-запитів, автоматична ревалідація, оптимістичні оновлення. Користувач додав товар у корзину — UI оновився миттєво, запит до API пішов фоном.
Каталог на Vue — розбір ключового кейсу
Різниця в UX відчувається одразу. Конкретика:
- Фільтр — чекбокси, range-слайдери, select з пошуком. Стан синхронізується з URL через
vue-router query params — посилання з фільтрами можна відправити колезі.
- Картка товару — галерея з зумом, перемикання SKU (колір/розмір), ціна перераховується через API
catalog.product.offer.list, залишки по складах з catalog.store.product.list.
- Віртуальний скролінг —
vue-virtual-scroller рендерить лише видимі елементи. Каталог у 10 000 товарів працює без гальм.
- Розумний пошук — debounced-запити до
search.title.search або ElasticSearch, автодоповнення через випадаючий список. У нашому проекті це скоротило час пошуку на 40%.
- Порівняння — динамічна таблиця характеристик з підсвічуванням відмінностей. Зберігання в Pinia + localStorage для персистентності.
Процес впровадження Vue.js покроково:
- Аудит поточної архітектури Бітрікса та виявлення вузьких місць (фільтрація, корзина, особистий кабінет).
- Проектування API — визначаємо ендпоінти, моделі даних, використовуємо
Bitrix\Main\Engine\Controller.
- Розробка Vue-віджетів або SPA — збірка на Vite, Code Splitting, Pinia.
- Інтеграція з Бітріксом — теговане кешування, OAuth, обробка помилок.
- Тестування під навантаженням (до 100 RPS) та деплой з CI/CD.
Продуктивність досягається за рахунок code splitting, tree shaking та lazy loading важких компонентів (Chart.js, карти, WYSIWYG). Бандл сторінки каталогу — 80–120 КБ gzip.
Nuxt.js і SEO: як зберегти індексацію
SPA на чистому Vue віддає пошуковику порожній HTML з <div id="app"></div>. Google вміє рендерити JS, але з затримкою в дні. Яндекс — взагалі непередбачувано. Nuxt.js вирішує:
- SSR — сервер віддає повний HTML, після гідратації працює як SPA.
- SSG — сторінки генеруються при
nuxt generate, роздаються з CDN. Максимальна швидкість.
- Гібридний режим — каталог статично, корзина та ЛК — SSR.
-
useHead() — динамічні title, description, Open Graph, Schema.org для кожної сторінки.
- Sitemap —
@nuxtjs/sitemap, маршрути з API Бітрікса. Це забезпечує повну індексацію — наша гарантія потрапляння в топ-5 Google.
Порівняння підходів та строки
| Ситуація |
Рекомендований підхід |
Ефект для бізнесу |
| Каталог 10 000+ SKU, складний фільтр |
Vue-віджети |
Прискорення в 3–5 разів, зростання конверсії 15-25% |
| B2B-портал, особистий кабінет |
SPA на Vue |
Зниження навантаження на сервер до 70% |
| Магазин з SEO-пріоритетом |
Nuxt.js + headless |
Індексація 100% сторінок, швидкість завантаження 0,8 с |
| Підхід |
Строки |
Що на виході |
| Vue-віджети (2–5 компонентів) |
1–3 тижні |
Реактивні елементи на існуючому сайті |
| SPA для особистого кабінету |
4–8 тижнів |
Vue-додаток + API на контролерах D7 |
| Каталог на Vue + Бітрікс API |
4–10 тижнів |
Фільтрація, корзина, порівняння без перезавантажень |
| Nuxt.js + Бітрікс headless |
6–12 тижнів |
SSR/SSG, повна функціональність, SEO |
Повний цикл: проектування API, розробка контролерів D7, Vue-додаток, налаштування Vite, тестування, деплой. Код рев'юється, покривається тестами, документується — не «зібрав і забув». Вартість розробки розраховується індивідуально після аналізу вашого поточного сайту та ТЗ. Детальну оцінку ви отримаєте протягом дня — замовте консультацію.
Типові помилки при інтеграції Vue.js і Бітрікс
- Використання
ajax.php замість Bitrix\Main\Engine\Controller — призводить до вразливостей та нестабільності.
- Відсутність тегованого кешування API — при високому навантаженні сервер не витримує.
- Ігнорування авторизації OAuth для SPA — сесійні токени можуть закінчуватися, ламаючи UX.
- Повний перепис всього сайту на SPA без необхідності — збільшує строки та бюджет.
- Неправильне налаштування Nuxt SSR — повільна генерація сторінок на бекенді.
Що входить у роботу та наші гарантії
- Документація API (Swagger/OpenAPI) для інтеграції з вашим бекендом.
- Доступи до репозиторію з кодом та CI/CD.
- Навчання вашої команди роботі з Vue-компонентами.
- Пост-релізна підтримка на 1 місяць — гарантія стабільності.
- Код відповідає стандартам PSR-12 та
Bitrix\Main\Engine\Controller.
Замовте розробку Vue.js інтерфейсів для вашого Бітрікс-проекту — отримайте консультацію та оцінку строків протягом дня. Напишіть нам, і ми надішлемо комерційну пропозицію з детальним планом робіт. Оцінимо проект безкоштовно — просто надішліть ТЗ або посилання на поточний сайт.