Вы запускаете дашборд для аналитики продаж, и каждая фильтрация вызывает перезагрузку страницы. Пользователи теряют контекст, а вы теряете время. Вместо 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-приложение под ключ — получите отзывчивый интерфейс без компромиссов.







