Astro 5.3

Автор
Matt Kane

Вышел Astro 5.3 — более быстрый рендеринг страниц, упрощённая настройка экспериментальных сессий и многое другое!

💘 Сезон любви — и вы влюбитесь в эти улучшения Astro:

Чтобы обновить существующий проект, используйте CLI @astrojs/upgrade. Или обновите вручную:

# Рекомендуется:
npx @astrojs/upgrade
# Вручную:
npm install astro@latest
pnpm upgrade astro --latest
yarn upgrade astro --latest

Faster page rendering

Astro упрощает async-функции внутри компонентов, но раньше каждый компонент и страница рендерились асинхронно, даже когда не нужно. На странице с множеством компонентов накладные расходы промисов заметно накапливаются!

Теперь благодаря вкладу MatthewLymer из Fora Astro рендерит компоненты асинхронно только если… (под)ожидаете… они действительно содержат вызов async-функции.

В бенчмарках это дало значительное ускорение синхронных компонентов. Польза и on-demand, и статическим сборкам; наибольший эффект — на время ответа SSR. Помогает даже страницам с async: большинство компонентов всё равно синхронны.

Точный выигрыш зависит от сайта. Сложные страницы с множеством компонентов — наибольший прирост; страницы с медленными внешними API при запросе могут не измениться. В тестах SSR обычно в 1.5–2 раза быстрее, если страница не опрашивает внешние API. Примеры:

Ничего делать не нужно — просто наслаждайтесь более быстрым рендерингом.

Automatic session storage setup

Astro 5.1 представил экспериментальный API хранения сессий для управления сессиями пользователей на сервере. Поддерживаются десятки backend-драйверов на unstorage.

Раньше нужно было настраивать драйвер в astro.config.mjs; теперь Astro автоматически настроит хранилище сессий с поддерживаемым адаптером.

Начинаем с @astrojs/node (файловая система) и @astrojs/netlify (Netlify Blobs). Надеемся добавить дефолтные драйверы для других адаптеров, где платформа включает storage API. Всегда можно настроить свой драйвер.

Если ещё не пробовали API сессий, включите experimental.session: true в astro.config.mjs:

astro.config.mjs
{
adapter: node({
mode: "standalone",
}),
experimental: {
session: true,
},
}

Если уже используете сессии, обновите конфиг под новый синтаксис — breaking change.

experimental.session теперь булев флаг true — дефолтный драйвер с поддерживаемым адаптером без дополнительной настройки!

Конфигурация сессий перенесена на top-level ключ session — для нестандартного драйвера и опций вроде префикса base или ttl истечения.

astro.config.mjs
{
adapter: node({
mode: "standalone",
}),
experimental: {
session: {
driver: "upstash",
},
session: true,
},
session: {
driver: "upstash",
},
}

Подробнее — в документации экспериментальных сессий.

More control over Netlify bundling

При сборке для serverless-платформ вроде Netlify или Vercel Astro бандлит все файлы и зависимости. Адаптеры Netlify и Vercel используют одну библиотеку, которая обычно хорошо определяет нужное.

Не всегда: иногда пропускает нужный файл, особенно статический, загружаемый через filesystem. Иногда включает лишнее — замедляет сборку и увеличивает бандл.

У адаптера Vercel уже были excludeFiles и includeFiles; в этом релизе они доступны и в адаптере Netlify. Оба принимают массив путей или globs.

astro.config.mjs
{
adapter: netlify({
includeFiles: ["src/locales/**/*.po"],
excludeFiles: ["node_modules/big-package/chonky-file.bin"],
}),
}

Спасибо Dani Fernández за этот вклад.

Improved handling of HEAD requests

API endpoints теперь автоматически обрабатывают HEAD, если определён обработчик GET. Astro вызовет GET и вернёт ответ с пустым телом. Для другого поведения можно определить отдельный обработчик. Подробнее — в документации API endpoints.

Спасибо Vitalii Rybachenko из Netlify за этот вклад.

Bug fixes

Как всегда, с релиза 5.2 мы усердно исправляли проблемы. Все детали — в changelog.

Thanks

Спасибо всем контрибьюторам, включая Emanuele Stoppa, Sarah Rainsberger, HiDeoo, Yan Thomas, Dani Fernández, unprintable123, Sean Boult, Armand Philippot, Vitalii Rybachenko, Cornelius Roemer, и многих других. Особая благодарность MatthewLymer за отличную работу над ускорением рендеринга.

Ждём, что вы построите с Astro 5.3! Вопросы и комментарии — в Astro Discord.