ВозможностиОрганизации
Документация
    Ring Platform

    Децентрализованное самостроящееся будущее

    Войти
    Организации
    Возможности
    Магазин
    Документация
    Концепции платформы
    RING ЭкономикаSonoratek LLCГлобальное влияниеAI встречает Web3
    Начать
    Быстрый стартКалькуляторДорожная карта
    Конфиденциальность|Контакты
    v1.104.21|Sonoratek LLC

    Documentation

    Концепции, ценность и типичные сценарии клонирования — меньше кода.

    Добро пожаловать в Ring
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Функции
    Store
    Склад и остатки
    Управление вендорами
    Комиссии и расчёты
    SubscriptionConductor
    PaymentConductor
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    Реферальные коды (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Entities
    Opportunities
    AI Matcher
    Real-Time Messaging
    Peer Games
    Модуль Новостей - Цифровой Газетный Опыт
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Notifications
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    Базовая настройка
    White Label
    Custom Branding
    Интеграция Web3
    Реальные Проекты
    Advanced Features
    Кастомизация
    Руководство по Ringization
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Web3
    Token launch jurisdictions
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Self-hosted развёртывание
    Vercel
    Docker
    Конфигурация Окружения
    Мониторинг и аналитика
    Оптимизация производительности
    Резервное копирование и восстановление
    Архитектура
    Data Model
    Security
    Real Time
    Архитектура PaymentConductor
    Бекенд Сервисы
    Интеграция Firebase
    Разработка
    Ring MCP Server

    Быстрый вход (CTO · аудиторы · агенты)

    Приветствие — миссия и аудитории
    Краткий справочник
    С чего начать
    Архитектура и Auth.js
    Режимы бэкенда и базы данных (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безопасность и соответствие требованиям
    ringdom.org — база LegioX
    Исходный код — лицензия MIT (GitHub)

    Documentation

    Концепции, ценность и типичные сценарии клонирования — меньше кода.

    Добро пожаловать в Ring
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Функции
    Store
    Склад и остатки
    Управление вендорами
    Комиссии и расчёты
    SubscriptionConductor
    PaymentConductor
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    Реферальные коды (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Entities
    Opportunities
    AI Matcher
    Real-Time Messaging
    Peer Games
    Модуль Новостей - Цифровой Газетный Опыт
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Notifications
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    Базовая настройка
    White Label
    Custom Branding
    Интеграция Web3
    Реальные Проекты
    Advanced Features
    Кастомизация
    Руководство по Ringization
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Web3
    Token launch jurisdictions
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Self-hosted развёртывание
    Vercel
    Docker
    Конфигурация Окружения
    Мониторинг и аналитика
    Оптимизация производительности
    Резервное копирование и восстановление
    Архитектура
    Data Model
    Security
    Real Time
    Архитектура PaymentConductor
    Бекенд Сервисы
    Интеграция Firebase
    Разработка
    Ring MCP Server

    Быстрый вход (CTO · аудиторы · агенты)

    Приветствие — миссия и аудитории
    Краткий справочник
    С чего начать
    Архитектура и Auth.js
    Режимы бэкенда и базы данных (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безопасность и соответствие требованиям
    ringdom.org — база LegioX
    Исходный код — лицензия MIT (GitHub)

    Documentation

    Концепции, ценность и типичные сценарии клонирования — меньше кода.

    Добро пожаловать в Ring
    Краткий справочник
    С чего начать
    Предварительные требования
    Установка
    Первый успех
    Следующие шаги
    Функции
    Store
    Склад и остатки
    Управление вендорами
    Комиссии и расчёты
    SubscriptionConductor
    PaymentConductor
    Интеграция платежей
    Интеграция WayForPay
    Web3 Кошелек
    Реферальные коды (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкинга Токенов
    Entities
    Opportunities
    AI Matcher
    Real-Time Messaging
    Peer Games
    Модуль Новостей - Цифровой Газетный Опыт
    Блоги участников
    Система Резервирования Имён Пользователей
    Научный редактор
    Notifications
    Push-уведомления через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безопасность и соответствие
    Система локалей
    Мобильный Опыт
    Паттерны Оптимизации Производительности
    Примеры
    Quick Start
    Базовая настройка
    White Label
    Custom Branding
    Интеграция Web3
    Реальные Проекты
    Advanced Features
    Кастомизация
    Руководство по Ringization
    Branding
    Темы оформления
    Features
    Localization
    Настройка токеномики
    Web3
    Token launch jurisdictions
    Интеграции
    Ethereum-кошельки (Wagmi v3)
    Развёртывание
    Self-hosted развёртывание
    Vercel
    Docker
    Конфигурация Окружения
    Мониторинг и аналитика
    Оптимизация производительности
    Резервное копирование и восстановление
    Архитектура
    Data Model
    Security
    Real Time
    Архитектура PaymentConductor
    Бекенд Сервисы
    Интеграция Firebase
    Разработка
    Ring MCP Server

    Быстрый вход (CTO · аудиторы · агенты)

    Приветствие — миссия и аудитории
    Краткий справочник
    С чего начать
    Архитектура и Auth.js
    Режимы бэкенда и базы данных (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безопасность и соответствие требованиям
    ringdom.org — база LegioX
    Исходный код — лицензия MIT (GitHub)
    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Оптимизация производительности

    Воспользуйтесь фильтрами Founder / Developer в боковой панели документации. Эта страница замещает устаревшие вымышленные сведения (например, $2.8M дохода, выдуманные примеры отчетности, фиктивные SLA Lighthouse). Описанные паттерны подтверждены в файлах next.config.mjs, lib/cached-data.ts, components/providers/web-vitals-provider.tsx, features/analytics/lib/analytics-db.ts и опыте продакшн-Docker.

    Платформа Ring ориентирована на быструю первую отрисовку (по умолчанию серверные компоненты React 19), актуальные списки маркетплейса (теги кеша + синхронизация после мутаций) и измеряемый UX (сбор Core Web Vitals). Производительность — это задача деплоя: ограничения по времени сборки, ловушки SSR и инвалидирование кеша, а не только косметика фронтенда.

    Стек производительности (подтверждено)

    СлойМеханизмГде используется
    ФреймворкNext.js 16 App Router, cacheComponents: truenext.config.mjs
    Кеш списковunstable_cache + revalidateTaglib/cached-data.ts
    Дедупликация чтенияReact.cache() для server readslib/services/firebase-service-manager.ts, actions
    Read-after-write30 сек. in-process кеш сущностейDatabaseService EntityCache
    Тяжелый UI-клиентdynamic(..., { ssr: false })components/docs/mdx-heavy-components.tsx
    Блоки кода DocsСерверный Shiki (highlightCodeToHtml)components/docs/code.tsx
    Изображенияnext/image WebP/AVIFnext.config.mjs → images.formats
    UX-метрикиuseReportWebVitals → POST /api/analytics/web-vitalscomponents/providers/web-vitals-provider.tsx, features/analytics/lib/analytics-db.ts
    Hints ресурсовprefetchDNS / preinit скриптыcontexts/app-context.tsx

    Почему производительность критична для вашего клона

    Медленные страницы opportunity и store прямо влияют на конверсию: пользователи бросают покупки, продавцы видят пустые дашборды, а уведомления AI выглядят «запаздывающими», даже если данные корректны.

    Что может оптимизировать фаундер без кода

    Сначала измеряйте

    Админ → Аналитика показывает медианы Web Vitals и ошибки клиента — зафиксируйте текущий уровень до смены бренда или добавления тяжёлых медиа.

    Дисциплина изображений

    Продуктовые и сущностные изображения — только через Blob/CDN-URL и next/image. Оверсайз PNG-герои — частая причина LCP-регрессий в новых клонах.

    Актуальность списков

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

    Кеширование и актуальность данных

    Жизненный цикл кеша списков

    Ролевой кеш списков

    Этот паттерн используется также для сущностей (getCachedEntitiesForRole / invalidateEntitiesCache) и админских новостных агрегатов (invalidateNewsStatsCache).

    Сервисы мутаций вызывают syncOpportunityDiscovery / syncEntityDiscovery — см. Синхронизация после мутаций Discovery. Никогда не кешируйте пути записи: всегда инвалидируйте кеш после CRUD.

    Дедупликация серверных чтений

    Оборачивайте тяжелые серверные fetch в cache() из react, чтобы параллельные серверные компоненты делили один запрос к БД (см. getCachedDocument в lib/services/firebase-service-manager.ts).

    Read-after-write (30 секунд)

    DatabaseService имеет короткоживущий EntityCache (TTL 30 сек), чтобы новые сущности были видны в ближайших запросах в пределах одного процесса — это не замена для revalidateTag.

    Паттерны React 19 в продакшне

    ПаттернГде смотреть пример

    Связанная документация

    Related documentation

    Monitoring & Analytics

    Следующее: health-checkи, Web Vitals API и админ-аналитика.

    Docker

    Схожие сценарии: история инцидентов Mermaid SSR и probes.

    Discovery Mutation Sync

    Глубже: инвалидирование кеша после CRUD тегов или возможностей.

    Performance

    Также смотрите: паттерны cache(), статическая генерация, заметки по edge.

    1. Документация
    2. /Развёртывание
    3. /Оптимизация производительности

    Обновлено 22 авг. 2026 г.4 мин прослушивания

    Оптимизация производительности

    Воспользуйтесь фильтрами Founder / Developer в боковой панели документации. Эта страница замещает устаревшие вымышленные сведения (например, $2.8M дохода, выдуманные примеры отчетности, фиктивные SLA Lighthouse). Описанные паттерны подтверждены в файлах next.config.mjs, lib/cached-data.ts, components/providers/web-vitals-provider.tsx, features/analytics/lib/analytics-db.ts и опыте продакшн-Docker.

    Платформа Ring ориентирована на быструю первую отрисовку (по умолчанию серверные компоненты React 19), актуальные списки маркетплейса (теги кеша + синхронизация после мутаций) и измеряемый UX (сбор Core Web Vitals). Производительность — это задача деплоя: ограничения по времени сборки, ловушки SSR и инвалидирование кеша, а не только косметика фронтенда.

    Стек производительности (подтверждено)

    СлойМеханизмГде используется
    ФреймворкNext.js 16 App Router, cacheComponents: truenext.config.mjs
    Кеш списковunstable_cache + revalidateTaglib/cached-data.ts
    Дедупликация чтенияReact.cache() для server readslib/services/firebase-service-manager.ts, actions
    Read-after-write30 сек. in-process кеш сущностейDatabaseService EntityCache
    Тяжелый UI-клиентdynamic(..., { ssr: false })components/docs/mdx-heavy-components.tsx
    Блоки кода DocsСерверный Shiki (highlightCodeToHtml)components/docs/code.tsx
    Изображенияnext/image WebP/AVIFnext.config.mjs → images.formats
    UX-метрикиuseReportWebVitals → POST /api/analytics/web-vitalscomponents/providers/web-vitals-provider.tsx, features/analytics/lib/analytics-db.ts
    Hints ресурсовprefetchDNS / preinit скриптыcontexts/app-context.tsx

    Почему производительность критична для вашего клона

    Медленные страницы opportunity и store прямо влияют на конверсию: пользователи бросают покупки, продавцы видят пустые дашборды, а уведомления AI выглядят «запаздывающими», даже если данные корректны.

    Что может оптимизировать фаундер без кода

    Сначала измеряйте

    Админ → Аналитика показывает медианы Web Vitals и ошибки клиента — зафиксируйте текущий уровень до смены бренда или добавления тяжёлых медиа.

    Дисциплина изображений

    Продуктовые и сущностные изображения — только через Blob/CDN-URL и next/image. Оверсайз PNG-герои — частая причина LCP-регрессий в новых клонах.

    Актуальность списков

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

    Кеширование и актуальность данных

    Жизненный цикл кеша списков

    Ролевой кеш списков

    Этот паттерн используется также для сущностей (getCachedEntitiesForRole / invalidateEntitiesCache) и админских новостных агрегатов (invalidateNewsStatsCache).

    Сервисы мутаций вызывают syncOpportunityDiscovery / syncEntityDiscovery — см. Синхронизация после мутаций Discovery. Никогда не кешируйте пути записи: всегда инвалидируйте кеш после CRUD.

    Дедупликация серверных чтений

    Оборачивайте тяжелые серверные fetch в cache() из react, чтобы параллельные серверные компоненты делили один запрос к БД (см. getCachedDocument в lib/services/firebase-service-manager.ts).

    Read-after-write (30 секунд)

    DatabaseService имеет короткоживущий EntityCache (TTL 30 сек), чтобы новые сущности были видны в ближайших запросах в пределах одного процесса — это не замена для revalidateTag.

    Паттерны React 19 в продакшне

    ПаттернГде смотреть пример

    Связанная документация

    Related documentation

    Monitoring & Analytics

    Следующее: health-checkи, Web Vitals API и админ-аналитика.

    Docker

    Схожие сценарии: история инцидентов Mermaid SSR и probes.

    Discovery Mutation Sync

    Глубже: инвалидирование кеша после CRUD тегов или возможностей.

    Performance

    Также смотрите: паттерны cache(), статическая генерация, заметки по edge.

    1. Документация
    2. /Развёртывание
    3. /Оптимизация производительности

    Обновлено 22 авг. 2026 г.4 мин прослушивания

    Оптимизация производительности

    Воспользуйтесь фильтрами Founder / Developer в боковой панели документации. Эта страница замещает устаревшие вымышленные сведения (например, $2.8M дохода, выдуманные примеры отчетности, фиктивные SLA Lighthouse). Описанные паттерны подтверждены в файлах next.config.mjs, lib/cached-data.ts, components/providers/web-vitals-provider.tsx, features/analytics/lib/analytics-db.ts и опыте продакшн-Docker.

    Платформа Ring ориентирована на быструю первую отрисовку (по умолчанию серверные компоненты React 19), актуальные списки маркетплейса (теги кеша + синхронизация после мутаций) и измеряемый UX (сбор Core Web Vitals). Производительность — это задача деплоя: ограничения по времени сборки, ловушки SSR и инвалидирование кеша, а не только косметика фронтенда.

    Стек производительности (подтверждено)

    СлойМеханизмГде используется
    ФреймворкNext.js 16 App Router, cacheComponents: truenext.config.mjs
    Кеш списковunstable_cache + revalidateTaglib/cached-data.ts
    Дедупликация чтенияReact.cache() для server readslib/services/firebase-service-manager.ts, actions
    Read-after-write30 сек. in-process кеш сущностейDatabaseService EntityCache
    Тяжелый UI-клиентdynamic(..., { ssr: false })components/docs/mdx-heavy-components.tsx
    Блоки кода DocsСерверный Shiki (highlightCodeToHtml)components/docs/code.tsx
    Изображенияnext/image WebP/AVIFnext.config.mjs → images.formats
    UX-метрикиuseReportWebVitals → POST /api/analytics/web-vitalscomponents/providers/web-vitals-provider.tsx, features/analytics/lib/analytics-db.ts
    Hints ресурсовprefetchDNS / preinit скриптыcontexts/app-context.tsx

    Почему производительность критична для вашего клона

    Медленные страницы opportunity и store прямо влияют на конверсию: пользователи бросают покупки, продавцы видят пустые дашборды, а уведомления AI выглядят «запаздывающими», даже если данные корректны.

    Что может оптимизировать фаундер без кода

    Сначала измеряйте

    Админ → Аналитика показывает медианы Web Vitals и ошибки клиента — зафиксируйте текущий уровень до смены бренда или добавления тяжёлых медиа.

    Дисциплина изображений

    Продуктовые и сущностные изображения — только через Blob/CDN-URL и next/image. Оверсайз PNG-герои — частая причина LCP-регрессий в новых клонах.

    Актуальность списков

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

    Кеширование и актуальность данных

    Жизненный цикл кеша списков

    Ролевой кеш списков

    Этот паттерн используется также для сущностей (getCachedEntitiesForRole / invalidateEntitiesCache) и админских новостных агрегатов (invalidateNewsStatsCache).

    Сервисы мутаций вызывают syncOpportunityDiscovery / syncEntityDiscovery — см. Синхронизация после мутаций Discovery. Никогда не кешируйте пути записи: всегда инвалидируйте кеш после CRUD.

    Дедупликация серверных чтений

    Оборачивайте тяжелые серверные fetch в cache() из react, чтобы параллельные серверные компоненты делили один запрос к БД (см. getCachedDocument в lib/services/firebase-service-manager.ts).

    Read-after-write (30 секунд)

    DatabaseService имеет короткоживущий EntityCache (TTL 30 сек), чтобы новые сущности были видны в ближайших запросах в пределах одного процесса — это не замена для revalidateTag.

    Паттерны React 19 в продакшне

    ПаттернГде смотреть пример

    Связанная документация

    Related documentation

    Monitoring & Analytics

    Следующее: health-checkи, Web Vitals API и админ-аналитика.

    Docker

    Схожие сценарии: история инцидентов Mermaid SSR и probes.

    Discovery Mutation Sync

    Глубже: инвалидирование кеша после CRUD тегов или возможностей.

    Performance

    Также смотрите: паттерны cache(), статическая генерация, заметки по edge.

    1. Документация
    2. /Развёртывание
    3. /Оптимизация производительности

    Обновлено 22 авг. 2026 г.4 мин прослушивания

    Сокращение локалей

    Меньше активных локалей (NEXT_PUBLIC_SUPPORTED_LOCALES) = меньше сборки и статических параметров на деплой.

    Цели Web Vitals (пороговые значения Google)

    МетрикаХорошо (≤)Плохо (>)
    LCP2.5s4s
    INP200мс500мс
    CLS0.10.25
    TTFB800мс1.8s
    FCP1.8s3s
    FID100мс300мс

    Значения берутся из ratingForMetric в features/analytics/lib/analytics-db.ts. Клиент сообщает рейтинг каждой метрики из next/web-vitals, буферизует и отправляет одним POST за debounce в /api/analytics/web-vitals.

    Рассматривайте производительность как критерий релиза при запуске клона: запустите Lighthouse на /, /opportunities и /store после деплоя и сравните c Admin-аналитикой через неделю.

    useActionState
    features/reviews/components/review-form.tsx
    useOptimistichooks/use-realtime.ts, hooks/use-realtime-opportunities.ts
    Server Actions + revalidatePathapp/_actions/*.ts

    Используйте Server Components для list/detail-оболочек; ограничивайте 'use client' лишь формами, туннелями, кошельками и визуализациями.

    Подводные камни при сборке и деплое

    1. 1

      Не SSR тяжелые визуализации на сервере

      Документация и маркетинговые виджеты подгружаются через dynamic(..., { ssr: false }) в mdx-heavy-components.tsx. Серверный рендеринг Mermaid/Shiki на верхнем уровне приводил к 30-секундным задержкам и 503 в продакшене — см. Развертывание в Docker.

    2. 2

      Блоки <Code> асинхронно обрабатываются на сервере через Shiki

      components/docs/code.tsx вызывает highlightCodeToHtml один раз на блок — не добавляйте на той же странице клиентские highlighter'ы.

    3. 3

      Таймаут сборки

      staticPageGenerationTimeout: 180 в next.config.mjs — большие деревья документации или множество локалей требуют дисциплины в инкрементальной генерации; уменьшайте область сканирования в scanDocsStaticParams, если сборка не влазит в лимиты CI.

    4. 4

      Standalone-вывод

      В next.config.mjs выставляется output: 'standalone' с outputFileTracingRoot, serverExternalPackages (Firebase, Auth.js, Solana, nodemailer), и outputFileTracingIncludes (i18n, локали, docs, ring-config, server.ts), чтобы контейнеры включали только нужные бандлы сервера.

    Оптимизация изображений

    next.config.mjs включает WebP/AVIF (images.formats) и remote patterns для Google-аватаров, Google Fonts, Vercel Blob и cdn.ring-platform.org, а также паттерны для каждого нового клона через collectCloneImageRemotePatterns. Добавляйте хосты CDN в images.remotePatterns при подключении клона.

    Измерение регрессий

    • Сбор: WebVitalsProvider (components/providers/web-vitals-provider.tsx), встраивается в app-client-shell.tsx
    • Хранилище: миграция 017_ring_analytics_schema.sql
    • Запрос: аналитика Admin или GET /api/analytics/web-vitals?scope=platform (admin)
    • Отключить запись: ANALYTICS_DISABLE_STORAGE=true для нагрузочного тестирования

    Полная справка: Мониторинг и аналитика.

    Более подробное руководство для разработчика

    Паттерны реализации (Firebase cache(), статическая генерация, edge-заметки) смотрите в разделах Разработка: производительность и Возможности: паттерны производительности — сверяйте примеры с postgres-клонами перед использованием firebase-специфичного кода.

    Сокращение локалей

    Меньше активных локалей (NEXT_PUBLIC_SUPPORTED_LOCALES) = меньше сборки и статических параметров на деплой.

    Цели Web Vitals (пороговые значения Google)

    МетрикаХорошо (≤)Плохо (>)
    LCP2.5s4s
    INP200мс500мс
    CLS0.10.25
    TTFB800мс1.8s
    FCP1.8s3s
    FID100мс300мс

    Значения берутся из ratingForMetric в features/analytics/lib/analytics-db.ts. Клиент сообщает рейтинг каждой метрики из next/web-vitals, буферизует и отправляет одним POST за debounce в /api/analytics/web-vitals.

    Рассматривайте производительность как критерий релиза при запуске клона: запустите Lighthouse на /, /opportunities и /store после деплоя и сравните c Admin-аналитикой через неделю.

    useActionState
    features/reviews/components/review-form.tsx
    useOptimistichooks/use-realtime.ts, hooks/use-realtime-opportunities.ts
    Server Actions + revalidatePathapp/_actions/*.ts

    Используйте Server Components для list/detail-оболочек; ограничивайте 'use client' лишь формами, туннелями, кошельками и визуализациями.

    Подводные камни при сборке и деплое

    1. 1

      Не SSR тяжелые визуализации на сервере

      Документация и маркетинговые виджеты подгружаются через dynamic(..., { ssr: false }) в mdx-heavy-components.tsx. Серверный рендеринг Mermaid/Shiki на верхнем уровне приводил к 30-секундным задержкам и 503 в продакшене — см. Развертывание в Docker.

    2. 2

      Блоки <Code> асинхронно обрабатываются на сервере через Shiki

      components/docs/code.tsx вызывает highlightCodeToHtml один раз на блок — не добавляйте на той же странице клиентские highlighter'ы.

    3. 3

      Таймаут сборки

      staticPageGenerationTimeout: 180 в next.config.mjs — большие деревья документации или множество локалей требуют дисциплины в инкрементальной генерации; уменьшайте область сканирования в scanDocsStaticParams, если сборка не влазит в лимиты CI.

    4. 4

      Standalone-вывод

      В next.config.mjs выставляется output: 'standalone' с outputFileTracingRoot, serverExternalPackages (Firebase, Auth.js, Solana, nodemailer), и outputFileTracingIncludes (i18n, локали, docs, ring-config, server.ts), чтобы контейнеры включали только нужные бандлы сервера.

    Оптимизация изображений

    next.config.mjs включает WebP/AVIF (images.formats) и remote patterns для Google-аватаров, Google Fonts, Vercel Blob и cdn.ring-platform.org, а также паттерны для каждого нового клона через collectCloneImageRemotePatterns. Добавляйте хосты CDN в images.remotePatterns при подключении клона.

    Измерение регрессий

    • Сбор: WebVitalsProvider (components/providers/web-vitals-provider.tsx), встраивается в app-client-shell.tsx
    • Хранилище: миграция 017_ring_analytics_schema.sql
    • Запрос: аналитика Admin или GET /api/analytics/web-vitals?scope=platform (admin)
    • Отключить запись: ANALYTICS_DISABLE_STORAGE=true для нагрузочного тестирования

    Полная справка: Мониторинг и аналитика.

    Более подробное руководство для разработчика

    Паттерны реализации (Firebase cache(), статическая генерация, edge-заметки) смотрите в разделах Разработка: производительность и Возможности: паттерны производительности — сверяйте примеры с postgres-клонами перед использованием firebase-специфичного кода.

    Сокращение локалей

    Меньше активных локалей (NEXT_PUBLIC_SUPPORTED_LOCALES) = меньше сборки и статических параметров на деплой.

    Цели Web Vitals (пороговые значения Google)

    МетрикаХорошо (≤)Плохо (>)
    LCP2.5s4s
    INP200мс500мс
    CLS0.10.25
    TTFB800мс1.8s
    FCP1.8s3s
    FID100мс300мс

    Значения берутся из ratingForMetric в features/analytics/lib/analytics-db.ts. Клиент сообщает рейтинг каждой метрики из next/web-vitals, буферизует и отправляет одним POST за debounce в /api/analytics/web-vitals.

    Рассматривайте производительность как критерий релиза при запуске клона: запустите Lighthouse на /, /opportunities и /store после деплоя и сравните c Admin-аналитикой через неделю.

    useActionState
    features/reviews/components/review-form.tsx
    useOptimistichooks/use-realtime.ts, hooks/use-realtime-opportunities.ts
    Server Actions + revalidatePathapp/_actions/*.ts

    Используйте Server Components для list/detail-оболочек; ограничивайте 'use client' лишь формами, туннелями, кошельками и визуализациями.

    Подводные камни при сборке и деплое

    1. 1

      Не SSR тяжелые визуализации на сервере

      Документация и маркетинговые виджеты подгружаются через dynamic(..., { ssr: false }) в mdx-heavy-components.tsx. Серверный рендеринг Mermaid/Shiki на верхнем уровне приводил к 30-секундным задержкам и 503 в продакшене — см. Развертывание в Docker.

    2. 2

      Блоки <Code> асинхронно обрабатываются на сервере через Shiki

      components/docs/code.tsx вызывает highlightCodeToHtml один раз на блок — не добавляйте на той же странице клиентские highlighter'ы.

    3. 3

      Таймаут сборки

      staticPageGenerationTimeout: 180 в next.config.mjs — большие деревья документации или множество локалей требуют дисциплины в инкрементальной генерации; уменьшайте область сканирования в scanDocsStaticParams, если сборка не влазит в лимиты CI.

    4. 4

      Standalone-вывод

      В next.config.mjs выставляется output: 'standalone' с outputFileTracingRoot, serverExternalPackages (Firebase, Auth.js, Solana, nodemailer), и outputFileTracingIncludes (i18n, локали, docs, ring-config, server.ts), чтобы контейнеры включали только нужные бандлы сервера.

    Оптимизация изображений

    next.config.mjs включает WebP/AVIF (images.formats) и remote patterns для Google-аватаров, Google Fonts, Vercel Blob и cdn.ring-platform.org, а также паттерны для каждого нового клона через collectCloneImageRemotePatterns. Добавляйте хосты CDN в images.remotePatterns при подключении клона.

    Измерение регрессий

    • Сбор: WebVitalsProvider (components/providers/web-vitals-provider.tsx), встраивается в app-client-shell.tsx
    • Хранилище: миграция 017_ring_analytics_schema.sql
    • Запрос: аналитика Admin или GET /api/analytics/web-vitals?scope=platform (admin)
    • Отключить запись: ANALYTICS_DISABLE_STORAGE=true для нагрузочного тестирования

    Полная справка: Мониторинг и аналитика.

    Более подробное руководство для разработчика

    Паттерны реализации (Firebase cache(), статическая генерация, edge-заметки) смотрите в разделах Разработка: производительность и Возможности: паттерны производительности — сверяйте примеры с postgres-клонами перед использованием firebase-специфичного кода.