Минимализм как техническое решение

Почему у этого блога ноль клиентских фреймворков

Минимализм - это не эстетика. Это способ убрать из проекта целые классы отказов.

Что мы убрали#

Было Стало Почему
React + клиентский рендер Astro SSR Контент должен быть в HTML сразу
ORM (Prisma) node:sqlite Нативный модуль, ноль зависимостей
Algolia / Meilisearch индекс в браузере Ноль запросов на нажатие
CSS-фреймворк 300 строк CSS Дизайн-система из брендбука
Капчи LLM Тематика блога

Почему SSR, а не SSG#

Контент живёт в базе и появляется из админки за секунды. Статическая генерация потребовала бы пересборки на каждое изменение.

SSR даёт то же самое для SEO - полный HTML в первом байте - плюс управляемое кэширование:

typescript
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 по клику

Что дали минимальные зависимости#

bash
# Было: 1 284 пакета, 340 МБ node_modules
# Стало: 287 пакетов, 96 МБ

Нагрузка на поддержку упала пропорционально: нет транзитивных CVE в yarn.lock, нет апгрейдов, ломающих прод.

Схема зависимостей блога: Astro, marked, shiki и нативный node:sqlite
Четыре зависимости: Astro, marked, shiki, шрифты

Итог#

Метрика Значение
Клиентский JS 6 КБ
Зависимостей 287 пакетов
Время до интерактивности ~0.4 с на 4G
Lighthouse SEO 100

Поделиться

Комментарии 0

Без капч - спам отсеивает ИИ. Вход через SSO.

Авторизация не настроена. Задайте VK_CLIENT_ID / VK_CLIENT_SECRET в .env.

Пока нет комментариев. Будьте первым - модератор отвечает быстро.