Full-stack проект для сравнительного анализа производительности рендеринга современных фронтенд-фреймворков: React, Vue 3 и Svelte.
Все три фронтенд-приложения обращаются к единому бэкенду на FastAPI, получают идентичные "тяжёлые" наборы данных и измеряют метрики производительности при их отрисовке.
Создать инструмент для честного и наглядного сравнения производительности рендеринга популярных фреймворков в стресс-сценариях, работающий по принципу "один бэкенд — три идентичных теста".
Проект состоит из 4 независимых сервисов, работающих локально:
| Сервис | Технология | Порт по умолчанию | Роль |
|---|---|---|---|
| Backend | FastAPI (Python) | :8000 |
Генератор сложных JSON-данных по запросу |
| Frontend 1 | React 18 + Vite | :5173 |
Первый стенд для тестирования |
| Frontend 2 | Vue 3 + Vite | :5174 |
Второй стенд для тестирования |
| Frontend 3 | SvelteKit + Vite | :5175 |
Третий стенд для тестирования |
Все фронтенды обращаются к бэкенду по эндпоинту POST /api/benchmark/start.
heavy-render-benchmark/
├── backend/ # FastAPI приложение
│ ├── app/
│ │ └── main.py # Основной файл с API и логикой генерации данных
│ ├── requirements.txt # Зависимости Python
│ └── venv/ # Виртуальное окружение (в .gitignore)
├── frontends/
│ ├── react-app/ # React-приложение
│ ├── vue-app/ # Vue 3-приложение
│ └── svelte-app/ # SvelteKit-приложение
├── docs/ # Документация
├── STATUS.md # Текущий статус разработки и план
└── README.md # Этот файл
# Клонируйте проект
git clone https://github.com/YOUR_USERNAME/heavy-render-benchmark.git
cd heavy-render-benchmark
# Настройте и запустите бэкенд
cd backend
python3 -m venv venv # Создайте виртуальное окружение
source venv/bin/activate # Активируйте его
pip install -r requirements.txt # Установите зависимости
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
Откройте новые окна терминала для каждого приложения.
cd frontends/react-app
npm install
npm run dev
Приложение будет доступно по адресу: http://localhost:5173
cd frontends/vue-app
npm install
npm run dev
Приложение будет доступно по адресу: http://localhost:5174
cd frontends/svelte-app
npm install
npm run dev
Приложение будет доступно по адресу: http://localhost:5175
Последнее обновление: 2026-01-21
Условия теста: payloadSize=2500, complexity='high', рендеринг HTML-таблицы (2500 строк).
| Фреймворк | ⚡ Время рендеринга | 🎮 Средний FPS | 📈 График производительности |
|---|---|---|---|
| React 18 | 478.00 мс | 4.2 | ![Красный] Критическая просадка (блокировка) |
| Vue 3 | 61.80 мс | 16.2 | ![Оранжевый] Умеренная просадка |
| Svelte | 252.00 мс | 35.0 | ![Зелёный] Плавная отрисовка |
Примечание: Тесты проводились в режиме "из коробки" (без ручных оптимизаций вроде React.memo).
Проведённый бенчмарк не просто сравнивает цифры, а иллюстрирует фундаментальные архитектурные различия современных фреймворков:
memo, useMemo) для тяжёлых сценариев рендеринга.Выбор фреймворка — это не поиск "самого быстрого", а выбор архитектуры, которая лучше всего соответствует целям проекта, его масштабу и приоритетам (сырая скорость vs. плавность vs. скорость разработки).
POST /api/benchmark/startТело запроса (JSON):
{
"framework": "react | vue | svelte",
"payloadSize": 1500,
"complexity": "low | medium | high"
}
Ответ: Объект JSON с сгенерированными данными в поле payload.
requestAnimationFrame).Для проверки гипотезы о производительности в условиях, максимально приближенных к реальным, был создан отдельный прототип — дашборд реального времени на Svelte с использованием Server-Sent Events (SSE).
Цель прототипа: Практически оценить плавность рендеринга (FPS) и задержки при высокочастотном потоке данных.
[FastAPI Backend] -> SSE Stream (100 объектов / 100 мс) -> [Svelte Frontend]
|-> Chart.js (Live Graph)
|-> Metrics Panel (FPS, Latency)
|-> Event History Table
/api/stream (бэкенд): Эндпоинт SSE, генерирующий пакеты по 100 обновлённых объектов каждые 100 мс (1000 событий/сек).stores.js) для обработки входящих данных, расчёта метрик и хранения истории.LiveChart.svelte: Компонент на Chart.js, отображающий линейный график, который обновляется в реальном времени с анимацией.MetricsPanel.svelte: Компонент, отображающий ключевые метрики производительности: FPS интерфейса, время обработки пакета, среднюю и последнюю задержку (latency).requestAnimationFrame, аналогичная основной, но интегрированная непосредственно в прототип.cd backend && uvicorn main:app --reloadcd frontends/svelte-sse-test && npm run devhttp://localhost:5176 (или другой порт из вывода терминала).Подробная документация по прототипу находится в frontends/svelte-sse-test/README-SSE-TEST.md.
requestAnimationFrame для замера FPS (реализовано во всех трёх фреймворках).React.memo, v-memo, {#key} и других практик.