Минимализм как техническое решение
Почему у этого блога ноль клиентских фреймворков
Минимализм - это не эстетика. Это способ убрать из проекта целые классы отказов.
Что мы убрали#
| Было | Стало | Почему |
|---|---|---|
| React + клиентский рендер | Astro SSR | Контент должен быть в HTML сразу |
| ORM (Prisma) | node:sqlite |
Нативный модуль, ноль зависимостей |
| Algolia / Meilisearch | индекс в браузере | Ноль запросов на нажатие |
| CSS-фреймворк | 300 строк CSS | Дизайн-система из брендбука |
| Капчи | LLM | Тематика блога |
Почему SSR, а не SSG#
Контент живёт в базе и появляется из админки за секунды. Статическая генерация потребовала бы пересборки на каждое изменение.
SSR даёт то же самое для SEO - полный HTML в первом байте - плюс управляемое кэширование:
res.headers.set('Cache-Control', 'public, max-age=0, s-maxage=300, stale-while-revalidate=86400');
Клиентский JS: 6 килобайт#
Весь интерактив блога - это поиск, переключатель темы и форма комментариев. Никаких Virtual DOM, никакого hydration:
- Поиск - типизированный индекс + bm25-lite, ~4 КБ
- Тема - один обработчик на
[data-theme-toggle] - Комментарии -
fetchи вставка узла - Видео -
replaceChildrenс iframe по клику
Что дали минимальные зависимости#
# Было: 1 284 пакета, 340 МБ node_modules
# Стало: 287 пакетов, 96 МБ
Нагрузка на поддержку упала пропорционально: нет транзитивных CVE в yarn.lock, нет апгрейдов, ломающих прод.
Итог#
| Метрика | Значение |
|---|---|
| Клиентский JS | 6 КБ |
| Зависимостей | 287 пакетов |
| Время до интерактивности | ~0.4 с на 4G |
| Lighthouse SEO | 100 |