نسخهٔ 7 فریم‌ورک Astro منتشر شد. کامپایلر .astro بازنویسی و به Rust منتقل شده، خط‌لولهٔ پردازش Markdown و MDX به Rust منتقل شده و ابزار ساخت به Vite 8 و Rollup متکی است تا زمان ساخت سایت‌ها به‌طور چشمگیری کاهش یابد.

عملکرد و بنچمارک‌ها

تیم توسعه گزارش کرده ساخت‌ها بین ۱۵ تا ۶۱٪ سریع‌تر شده‌اند. به‌عنوان نمونه، زمان ساخت سایت نمونه astro.build از ۶۲.۷۰ ثانیه به ۲۴.۲۴ ثانیه رسید و مستندات ۸٬۴۳۱ صفحه‌ای Cloudflare از ۳۸۶.۸۹ ثانیه به ۲۶۱.۹۴ ثانیه کاهش یافت. این بهبود در پروژه‌های بزرگ با هزاران صفحه و در پروژه‌هایی که از MDX به‌فراوانی استفاده می‌کنند ملموس‌تر است.

چه بخش‌هایی بازنویسی شده‌اند

  • کامپایلر Rust: پیاده‌سازی قبلی در Go جایگزین شده است. نسخهٔ جدید برای پارسینگ از oxc و برای scoping از Lightning CSS استفاده می‌کند. برخورد با HTML سخت‌گیرانه‌تر شده: تگ‌های بازِ بسته‌نشده اکنون خطا می‌دهند، تودرتویی نامعتبر همان‌طور که نوشته شده حفظ می‌شود و فاصلهٔ سفید بین عناصر مطابق قوانین JSX رفتار می‌کند.
  • خط‌لولهٔ Markdown در Rust: پردازش Markdown و MDX اکنون با Sätteri انجام می‌شود؛ پردازشگری نوشته‌شده روی pulldown-cmark و oxc که قابلیت‌هایی مانند GitHub Flavored Markdown، نگارش هوشمند، شناسهٔ سرفصل‌ها، ریاضیات و wikilink را به‌صورت داخلی فراهم می‌کند. پروژه‌هایی که به remark یا rehype وابسته‌اند می‌توانند خط‌لولهٔ قدیمی را نگه دارند.
  • موتور رندر مبتنی بر صف: رندرینگ به موتوری مبتنی بر صف تغییر یافته تا همزمانی و مقیاس‌پذیری در سایت‌های بزرگ بهبود یابد.
  • پایهٔ ابزارسازی: مهاجرت به Vite 8 و Rollup باعث بهره‌برداری از بهینه‌سازی‌های جدید در مرحلهٔ build شده است.

مهاجرت، سازگاری و گزینه‌های جدید

فرآیند مهاجرت با دستور npx @astrojs/upgrade انجام می‌شود و راهنمای ارتقا به v7 جزئیات لازم را توضیح می‌دهد. تغییرات کلیدی عبارت‌اند از:

  • فلگ‌های تجربی برای کامپایلر Rust، موتور رندر صف‌بندی‌شده، لاگینگ، کشینگ و مسیریابی پیشرفته به حالت پایدار منتقل شده‌اند.
  • src/fetch.ts به‌عنوان نام فایل رزرو شده تعیین شده است.
  • پکیج @astrojs/db حذف شده و پیشنهاد جایگزینی به استفاده از Drizzle یا node:sqlite است.
  • محتوای منسوخ‌شدهٔ astro:transitions حذف شده است.

نسخه‌های فرعی ۷.۱ و ۷.۲

پس از عرضهٔ اصلی، دو به‌روزرسانی فرعی منتشر شد که برخی قابلیت‌ها را اضافه یا اصلاح کردند:

  • Astro 7.1 (16 July): کنترل‌های CSP جدید (script-src-elem, script-src-attr, style-src-elem, style-src-attr) برای مجوزدهی محدود به استایل‌های inline، بهبودهای تابع paginate() با گزینهٔ format، فلگ --ignore-lock برای اجرای هم‌زمان دو سرور dev، گزینهٔ deferRender در loaderِ glob() و یک فلگ تجربی collectionStorage: "chunked" که فایل .astro/data-store.json را هر ۱۰ مگابایت تقسیم می‌کند.
  • Astro 7.2 (6 August): ساخت‌های افزایشی (incremental builds) معرفی شد. با فعال‌سازی experimental.incrementalBuild مسیرها از طریق بازگرداندن یک cacheKey در getStaticPaths() به‌صورت اختیاری وارد جریان ساخت افزایشی می‌شوند؛ برای مجموعه‌های محتوا، استفاده از entry.digest معمولاً مناسب است. پیگیری جزئیات در roadmap GitHub امکان‌پذیر است.
نشانه‌ها و تغییرات کلیدی در Astro 7

بازخورد جامعه

پست انتشار در Hacker News واکنش‌های متنوعی داشته و تا کنون ۲۱۱ امتیاز دریافت کرده است. برخی از کاهش تعداد وابستگی‌ها از ۲۴۷ در v6 به ۱۹۰ در v7 تمجید کرده‌اند، و برخی دیگر دربارهٔ سخت‌گیری بیشتر در کامپایل HTML و تغییر خط‌لولهٔ Markdown ابراز نگرانی کرده‌اند. یکی از اعضای تیم توسعه (Erika) تأکید کرده خط‌لولهٔ جدید قابل پلاگ‌شدن است و unified حذف نمی‌شود.

اهمیت این تغییر

Astro پیش‌تر به‌عنوان فریم‌ورکی مناسب سایت‌های محتوایی با رویکرد «بدون جاوااسکریپت کلاینتی پیش‌فرض» شناخته می‌شد. انتقال بخش‌هایی از ابزار ساخت به کد بومی (Rust) و بهره‌گیری از Vite 8، فاصلهٔ عملکردی Astro را با رقبایی که از خط‌لوله‌های Rust بهره می‌برند کاهش داده و برای پروژه‌های بزرگ عملکرد ساخت را به‌طور محسوسی بهتر می‌کند.

گام بعدی

توسعه‌دهندگان پروژه‌های بزرگ و تولیدکنندگان مستندات باید گزینه‌های جدید کش و مسیریابی را بررسی کنند و امکان استفاده از ساخت‌های افزایشی را در پروژه‌های واقعی آزمایش نمایند. راهنمای رسمی و جزئیات مهاجرت در سایت پروژه (astro.build) و مخزن‌های مرتبط در GitHub موجود است.