SvelteKit и Astro — оба современны, оба быстры, оба поддерживают SSG и SSR. Но у них принципиально разные целевые аудитории и архитектурные решения. Разбираем, когда что выбрать.
Ключевое различие: Svelte-first vs Content-first
SvelteKit — это фреймворк для создания Svelte-приложений. Его цель — весь ваш сайт написать на Svelte. Это полноценный метафреймворк (как Next.js, но для Svelte).
Astro — контент-ориентированный фреймворк. Большинство страниц — чистый HTML. Svelte (и React, Vue, Preact) можно использовать как острова интерактивности для отдельных компонентов.
Сравнительная таблица
| Параметр | Astro | SvelteKit |
|---|---|---|
| Язык компонентов | .astro + любой фреймворк | .svelte |
| Размер JS (SSG-блог) | 0-10 KB | 80-150 KB (Svelte-рантайм) |
| PageSpeed (SSG) | 98-100 | 88-96 |
| SSR | ✅ Через адаптеры | ✅ Встроен |
| TypeScript | ✅ Нативно | ✅ Нативно |
| Синтаксис компонентов | JSX-подобный | Svelte (уникальный) |
| Реактивность | Только в островах | Везде (Svelte stores) |
| Файловая маршрутизация | ✅ | ✅ |
| Адаптеры деплоя | Cloudflare, Vercel, Netlify… | Cloudflare, Vercel, Netlify… |
| Экосистема | npm + интеграции | npm + @sveltejs |
| Кривая обучения | Средняя | Низкая (Svelte прост) |
Производительность: реальные числа
Astro SSG-блог (без интерактивности):
- JavaScript: 0 KB ✅
- TTFB: 20 мс (CDN)
- PageSpeed: 100
SvelteKit SSG-блог:
- JavaScript: ~90 KB (Svelte рантайм + гидратация)
- TTFB: 20 мс (CDN)
- PageSpeed: 91-95
Svelte значительно легче React (~90 KB vs ~130 KB), но всё же это клиентский код, которого у Astro просто нет для статичных страниц.
Svelte-компоненты в Astro
Приятная особенность: вы можете использовать Svelte в Astro! Astro поддерживает Svelte как острова:
npx astro add svelte ---
import SvelteCounter from '../components/Counter.svelte';
---
<!-- Svelte работает как остров! -->
<SvelteCounter initialValue={0} client:load /> <!-- Counter.svelte -->
<script lang="ts">
export let initialValue: number = 0;
let count = initialValue;
</script>
<button on:click={() => count++}>
Счётчик: {count}
</button> То есть вы получаете реактивность Svelte там, где нужно, и нулевой JS там, где не нужно.
Когда SvelteKit лучше Astro
1. Полноценное веб-приложение
Если ваш проект — это SaaS, панель управления, интерактивный дашборд, где каждая страница требует реактивности — SvelteKit подходит лучше. Astro-острова эффективны для единичных интерактивных элементов, но не для SPA-подобных приложений.
<!-- SvelteKit: реактивность везде из коробки -->
<script>
import { page } from '$app/stores';
import { writable } from 'svelte/store';
const cart = writable([]);
</script>
<p>URL: {$page.url.pathname}</p>
<Cart {cart} /> 2. Реальное время (WebSockets, SSE)
SvelteKit имеет встроенный механизм для SSE и WebSockets через серверные роуты. Реакция на обновления данных — нативная через Svelte-стор.
3. Svelte-first команда
Если вся команда знает Svelte — SvelteKit очевидный выбор. Нет смысла учить Astro ради Svelte-островов.
Когда Astro лучше SvelteKit
1. Контентный сайт (блог, документация, лендинг)
Для 95% контентных страниц нет никакой необходимости в клиентском JS. Astro даёт PageSpeed 100 без усилий.
2. Мульти-фреймворк команда
Команда использует React и Svelte одновременно? В Astro они работают вместе:
---
import ReactHeader from './Header.tsx'; // React
import SvelteCounter from './Counter.svelte'; // Svelte
import VueWidget from './Widget.vue'; // Vue
---
<ReactHeader client:load />
<SvelteCounter client:visible />
<VueWidget client:idle /> 3. SEO как основной приоритет
Для SEO-проектов нулевой клиентский JS Astro даёт конкурентное преимущество перед SvelteKit.
Маршрутизация: схожая, но разная
SvelteKit:
src/routes/
├── +page.svelte → /
├── +layout.svelte → Обёртка
├── blog/
│ ├── +page.svelte → /blog/
│ └── [slug]/
│ └── +page.svelte → /blog/[slug]/
└── api/
└── posts/
└── +server.ts → /api/posts (API endpoint) Astro:
src/pages/
├── index.astro → /
├── blog/
│ ├── index.astro → /blog/
│ └── [slug].astro → /blog/[slug]/
└── api/
└── posts.ts → /api/posts (API endpoint) Концептуально идентично — оба используют файловую маршрутизацию.
Итог
| Задача | Рекомендация |
|---|---|
| Блог, документация, лендинг | Astro |
| Портфолио разработчика | Astro (и покажи SvelteKit остров!) |
| SaaS дашборд | SvelteKit |
| E-commerce (сложная корзина) | SvelteKit |
| Проект где нужен Svelte и максимальный PageSpeed | Astro + Svelte острова |
Правда в том, что Astro и SvelteKit решают разные задачи. Если вы строите контентный сайт — Astro. Если полноценное приложение на Svelte — SvelteKit. Если хотите лучшее из обоих миров — Astro с Svelte-островами.