Ви запускаєте дашборд для аналітики продажів, і кожна фільтрація викликає перезавантаження сторінки. Користувачі втрачають контекст, а ви втрачаєте час. Замість SSR з його серверними витратами ми використовуємо CSR (Client-Side Rendering): браузер сам будує інтерфейс, сервер віддає тільки скелет і скрипти. За 10+ років ми реалізували понад 50 таких проєктів для логістики, fintech та e-commerce. Наприклад, для однієї транспортної компанії ми скоротили час до взаємодії (TTI) з 8 до 2.5 секунд, перевівши CRM на CSR з React і TanStack Router. Це архітектура SPA, ідеальна для закритих додатків: дашборди, кабінети, інструменти. Гарантуємо чуйний інтерфейс з локальним станом, навіть на слабкому залізі.
Зв'яжіться з нами для консультації щодо вибору архітектури.
Коли CSR краще SSR?
| Критерій | CSR | SSR |
|---|---|---|
| SEO для публічного контенту | Погано | Добре |
| Перше завантаження | Повільніше (TTFB ~200 мс, потім гідратація) | Швидше (готовий HTML) |
| Наступні переходи | Миттєво | Кожен раз запит до сервера |
| Складний стан на клієнті | Природно (Zustand, Redux) | Ускладнюється (react-query, server state) |
| Серверні ресурси | Мінімум | Потрібен сервер для рендера |
| Офлайн-режим (PWA) | Можливий (Service Worker) | Складно |
Чому CSR підходить для SPA?
SPA — це архітектура, де весь інтерфейс працює в браузері, а сервер виступає тільки як API. CSR ідеально лягає на цю модель: немає серверного рендерингу, кожен маршрут — це компонент, що завантажується на вимогу. Користувач отримує плавні переходи без моргання сторінки. Для закритих додатків, таких як дашборди або особисті кабінети, де SEO не потрібне, CSR — найефективніший вибір. Порівняйте з SSR: на кожен перехід SSR генерує новий HTML, що створює затримки. CSR ж кешує маршрути на клієнті та оновлює тільки дані.
Як вибрати інструменти для CSR?
Ми використовуємо сучасний стек, перевірений у продакшені. Типова збірка включає:
- Vite для збірки (швидше Webpack у 10 разів на hot reload)
- React 18 або Vue 3 для UI
- TanStack Router для типобезпечного роутингу
- TanStack Query для серверного стану
- Vite PWA plugin для офлайн-режиму
Приклад конфігурації Vite з роутером та ручним чанкінгом:
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import { TanStackRouterVite } from '@tanstack/router-plugin/vite';
export default defineConfig({
plugins: [TanStackRouterVite(), react()],
resolve: {
alias: {
'@': '/src',
},
},
build: {
rollupOptions: {
output: {
manualChunks: {
vendor: ['react', 'react-dom'],
router: ['@tanstack/react-router'],
query: ['@tanstack/react-query'],
},
},
},
},
});
Як оптимізувати продуктивність CSR-додатку?
Стратегія: code splitting за маршрутами, аналіз бандла, динамічний імпорт важких бібліотек. Наприклад, бібліотека xlsx (200+ КБ) завантажується тільки при кліку на «Експорт». Використовуємо TanStack Router з lazy-завантаженням сторінок та Suspense. Додатково вмикаємо tree-shaking — Vite видаляє невикористаний код. Налаштуйте sideEffects: false у package.json для максимальної ефективності.
// Динамічний імпорт
async function exportToExcel(data: Row[]) {
const { utils, writeFile } = await import('xlsx');
const ws = utils.json_to_sheet(data);
const wb = utils.book_new();
utils.book_append_sheet(wb, ws, 'Дані');
writeFile(wb, 'export.xlsx');
}Code splitting за маршрутами:
const DashboardPage = lazy(() => import('@/pages/Dashboard'));
const ReportsPage = lazy(() => import('@/pages/Reports'));
Яких метрик продуктивності ми досягаємо?
| Метрика | Цільове значення | Досягнуте |
|---|---|---|
| LCP | <2.5 с | 1.8 с |
| INP | <200 мс | 150 мс |
| First load JS | <150 КБ | 120 КБ |
| TTFB | <800 мс | 400 мс (CDN) |
Як ми заміряємо ці метрики?
Використовуємо Lighthouse CI у pipeline, а також лабораторні тести на реальних пристроях. Всі метрики фіксуються в Grafana.Як реалізувати PWA та офлайн у CSR?
Додаємо Vite PWA plugin. Workbox кешує API-запити (Stale-While-Revalidate, термін 24 год). Додаток працює офлайн.
VitePWA({
registerType: 'autoUpdate',
workbox: {
globPatterns: ['**/*.{js,css,html,ico,png,svg,woff2}'],
runtimeCaching: [
{
urlPattern: /^https:\/\/api\.example\.com\/products/,
handler: 'StaleWhileRevalidate',
options: {
cacheName: 'api-products',
expiration: {
maxAgeSeconds: 24 * 60 * 60,
},
},
},
],
},
}) Які етапи включає розробка CSR?
- Аналітика: вивчаємо вимоги, навантаження, сценарії використання.
- Проєктування: архітектура модулів, схема даних, маршрути.
- Реалізація: ітеративна розробка з код-рев'ю та тестами.
- Тестування: unit, e2e (Playwright), продуктивність (Lighthouse).
- Деплой: налаштування CDN, CI/CD (GitHub Actions), моніторинг.
Що ви отримуєте в результаті?
- Технічна документація: архітектура, API-специфікація, інструкція з розгортання
- Вихідний код з CI/CD (GitHub Actions, Docker)
- Доступи до хостингу, домену, SSL
- Навчання команди: як запускати, налаштовувати, доопрацьовувати
- Підтримка: 2 тижні пост-релізу, виправлення багів
Скільки часу займає розробка та як розраховується вартість?
Орієнтовні терміни — від 4 до 12 тижнів залежно від складності. Вартість розраховується індивідуально після аудиту проєкту. Якщо ви хочете отримати консультацію щодо вибору архітектури, напишіть нам — допоможемо визначити, чи підходить CSR.
Ми створюємо швидкі чуйні інтерфейси. Замовте CSR-додаток під ключ — отримайте чуйний інтерфейс без компромісів.







