Дайджесты новостей
Минималистичный плакат с хронометражем стадий сборки проекта и шкалой таймингов компилятора

Astro 7.4: профилирование сборки флагом --timings и независимые сервисы изображений

С ростом контентных порталов, блогов и корпоративных сайтов на фреймворке Astro время статической генерации (Static Site Generation, SSG) неизбежно увеличивается. Когда кодовая база разрастается до сотен или тысяч страниц, процесс сборки рискует превратиться в «черный ящик»: в терминале крутится бесконечный спиннер компиляции, а разработчик гадает, что именно тормозит процесс. Виноваты ли тяжелые плагины Vite, валидация контентных коллекций Zod, парсинг деревьев Markdown или медленная оптимизация картинок через библиотеку Sharp?

В конце октября 2026 года разработчик Сара Рейнсбергер (Sarah Rainsberger) представила в официальном блоге Astro минорный релиз Astro 7.4. Обновление продолжает развитие линейки фреймворка, начатое в релизе Astro 7.3, и приносит инструменты бескомпромиссной прозрачности: глобальный диагностический флаг --timings, разделение обработчиков медиа на фазы сборки и рантайма, а также новый обработчик notFound() для кастомных точек входа.

Профилирование с флагом --timings: рентген стадий сборки

Главной новинкой для разработчиков больших проектов стал встроенный профилировщик, активируемый одним флагом командной строки:

# Запуск сборки проекта с выводом подробной иерархической таблицы таймингов
npx astro build --timings

Инструмент замера производительности интегрирован непосредственно в конвейер AstroBuild и оборачивает ключевые хуки жизненного цикла в стандартные метки браузерного Performance API (performance.mark и performance.measure).

По завершении сборки консоль выводит детальную раскладку времени по ключевым фазам компиляции:

  • Конфигурация Vite и плагины: показывает время инициализации сборочного окружения и выполнения сторонних трансформаций;
  • Валидация Content Collections: замеряет проверку схем данных через Zod;
  • Парсинг Markdown и подсветка синтаксиса: отображает затраты на генерацию абстрактных синтаксических деревьев и работу парсеров Shiki или Prism;
  • Оптимизация изображений: фиксирует чистое время сжатия и конвертации графических ассетов через Sharp;
  • Пререндеринг статических страниц: выводит суммарную длительность генерации HTML и формирует отдельный топ-5 самых медленных страниц проекта (Slowest Routes), помогая мгновенно локализовать «тяжелые» компоненты.

Меня в этом выводе зацепила точность локализации: если одна из страниц обращается к медленному внешнему GraphQL API или выполняет тяжелый SQL-запрос во фронтматтере, ты сразу видишь её имя в списке самых медленных маршрутов вместо долгого ручного поиска по логам.

Разделение image.service: диета для серверных функций

Вторая фундаментальная архитектурная доработка Astro 7.4 касается оптимизации размера развертываемых артефактов в гибридных и серверных (SSR) проектах.

Раньше разработчики объявляли сервис обработки изображений глобально: если в проекте использовался мощный C++ пакет Sharp, его скомпилированные бинарники тащились как на этап статической генерации, так и в серверные функции AWS Lambda, Cloudflare Workers или Vercel Edge. В результате размер бессерверного бандла раздувался на 20–30 мегабайт, провоцируя ощутимые задержки при холодном старте (Cold Start).

В Astro 7.4 конфигурационный объект image.service позволяет независимо настраивать обработчики для этапа сборки (build) и для рантайма (runtime):

// astro.config.mjs: независимая настройка сервисов обработки изображений
import { defineConfig, passthroughImageService } from 'astro/config';
import node from '@astrojs/node';

export default defineConfig({
  output: 'hybrid',
  adapter: node({ mode: 'standalone' }),
  image: {
    service: {
      // На этапе статической сборки используем локальный Sharp для максимального сжатия
      build: {
        entrypoint: 'astro/assets/services/sharp',
        config: {
          limitInputPixels: true,
        },
      },
      // В рантайме SSR-сервера отключаем тяжелые вычисления и отдаем оригинальные URL
      runtime: passthroughImageService(),
    },
  },
  experimental: {
    // Включение многопоточной генерации страниц на всех ядрах процессора
    parallelPrerender: true,
  },
});

Благодаря такому разделению статическая графика сжимается с максимальным качеством на машине разработчика или в CI, а серверный контейнер остается легким и стартует за считанные миллисекунды.

Программный обработчик notFound() в API-эндпоинтах

До релиза 7.4 при создании кастомных серверных эндпоинтов (API Routes) или интеграции Astro с микросервисными HTTP-серверами (например, Hono или Fastify) выброс стандартной ошибки 404 превращался в проблему: возвращать плоский JSON было неудобно, а отрендерить красивую пользовательскую страницу 404.astro требовало костылей с ручным импортом компонентов макета.

В Astro 7.4 появился декларативный обработчик notFound(), доступный прямо в контексте маршрута:

// src/pages/api/posts/[slug].ts: программный возврат нативной страницы 404
import type { APIRoute } from 'astro';
import { getPostBySlug } from '../../../lib/db';

export const GET: APIRoute = async ({ params, notFound }) => {
  const post = await getPostBySlug(params.slug);

  if (!post) {
    // Вызывает полноценный рендер страницы 404.astro с сохранением заголовков и стилей
    return notFound();
  }

  return new Response(JSON.stringify(post), {
    status: 200,
    headers: { 'Content-Type': 'application/json' },
  });
};

Экспериментальный параллельный пререндеринг

Для по-настоящему крупных контентных проектов с десятками тысяч страниц Astro 7.4 внедряет экспериментальную многопоточность через флаг experimental.parallelPrerender.

Вместо последовательного рендеринга страниц в основном потоке Node.js фреймворк поднимает пул фоновых воркеров (Worker Threads), равномерно распределяя очередь статических маршрутов по всем доступным ядрам центрального процессора. На современных 8- и 16-ядерных рабочих станциях и CI-раннерах это сокращает общее время компиляции масштабных сайтов в 2–4 раза без изменения логики шаблонов.

Дополняют картину кастомные страницы редиректов (Custom Redirect Pages): если раньше Astro генерировал дефолтный HTML с мета-тегом http-equiv="refresh", то теперь разработчики могут подключить собственный брендированный шаблон страницы перенаправления с произвольными заголовками и анимацией ожидания.

Минорный релиз Astro 7.4 наглядно показывает зрелость платформы: разработчики ядра сосредоточились не на мимолетном хайпе, а на глубоких прикладных инструментах оптимизации, дающих инженерам полный контроль над скоростью и ресурсами веб-приложений.