needhelp
← Back to blog

غواصی عمیق در Astro 6.4: خط لوله Markdown قابل اتصال، Sätteri مبتنی بر Rust و انقلاب استقرار Cloudflare

by needhelp
Astro
Frontend
Rust
Cloudflare
Markdown
SSG
توسعه وب

در ۲۸ می ۲۰۲۶، Astro نسخه ۶.۴ را منتشر کرد. این یک آپدیت معمولی feature یا مجموعه‌ای از رفع باگ نیست—یک نقطه عطف ساختاری است.

سه تغییر اصلی، هرکدام در راستای یک روند عمیق:

  • رابط پردازشگر Markdown — پایان انحصار ده ساله unified
  • Sätteri — یک پردازشگر Rust Markdown/MDX از ابتدا، کاهش زمان build CI از ۱۲۰s به ۵۵s
  • Helper cf() — جمع کردن ۶+ اتصال و تزریق زمینه Cloudflare در یک خط

پردازش به عنوان یک رابط

بدهی تاریخی

از روز اول، خط لوله Markdown Astro به اکوسیستم unified متصل بوده—به طور خاص remark (تجزیه AST Markdown) + rehype (تبدیل AST HTML) و هزاران پلاگین آن. این به خودی خود مشکل نیست—unified گسترده و انعطاف‌پذیر است. مشکل سخت‌کد شدن است.

نمی‌توانی آن را عوض کنی. حتی اگر فقط GFM و anchorهای سرصفحه نیاز داشته باشی، کل خط لوله JS remark → rehype → stringify هنوز end to end اجرا می‌شود.

API markdown.processor در ۶.۴ این را از یک وابستگی ثابت به یک رابط قابل تعویض تبدیل می‌کند.

تغییر معماری

تغییر کلیدی: astro.config دیگر remarkPlugins / rehypePlugins را مستقیماً در سطح بالا نمی‌پذیرد. در عوض، یک فراخوانی یکپارچه processor() وجود دارد.

سینتکس جدید کانفیگ

سینتکس قدیمی هنوز در ۶.۴ کار می‌کند، اما حالا منسوخ شده و در Astro 8.0 حذف خواهد شد:

// ❌ منسوخ (در ۶.۴ کار می‌کند، در ۸.۰ حذف می‌شود)
import { defineConfig } from 'astro/config';
export default defineConfig({
markdown: {
remarkPlugins: ['remark-toc'],
rehypePlugins: ['rehype-slug'],
smartypants: true,
gfm: true,
},
});

سینتکس جدید:

// ✅ Astro 6.4+ توصیه می‌شود
import { defineConfig } from 'astro/config';
import { unified } from '@astrojs/markdown-remark';
import remarkToc from 'remark-toc';
import rehypeSlug from 'rehype-slug';
export default defineConfig({
markdown: {
processor: unified({
remarkPlugins: [remarkToc],
rehypePlugins: [rehypeSlug],
smartypants: true,
gfm: true,
}),
},
});

Sätteri: Rust وارد خط لوله Markdown می‌شود

چیست

@astrojs/markdown-sätteri یک بازنویسی از ابتدا یک پردازشگر Rust Markdown/MDX است. یک نسخه شتاب‌یافته Rust از unified نیست—مشخصات AST خودش، تجزیه‌کننده خودش، سریالایزر خودش را دارد. یعنی پلاگین‌های remark را سریع‌تر اجرا نمی‌کند—اصلاً پلاگین‌های remark را اجرا نمی‌کند.

معیارهای عملکرد

تیم Astro معیارهایی روی دو سایت واقعی اجرا کرد:

سایت Unified (پایه) Sätteri افزایش سرعت
سایت مستندات Astro ۱۴۲s ۶۳s ۲.۲۵×
سایت مستندات Cloudflare ۱۲۰s ۵۵s ۲.۱۸×
سایت بازاریابی متوسط ۳۸s ۲۲s ۱.۷۳×

Sätteri روی سایت‌های مستندات بزرگ بیشترین سرعت را دارد. دلیلش سرراست است—هر پلاگین در خط لوله unified یک پیمایش کامل AST انجام می‌دهد؛ پلاگین‌های بیشتر یعنی پیمایش‌های بیشتر. Sätteri ویژگی‌های رایج GFM را به عنوان گزینه‌های compile-time دارد و همه چیز را در یک پاس کامل می‌کند.


استقرار Cloudflare: شش اتصال در یک

کار دستی قدیمی

قبل از ۶.۴، استقرار روی Cloudflare از Astro نیاز به مدیریت دستی داشت:

// ❌ ۶.۳ و قبل — هر اتصال دستی تزریق می‌شد
export async function onRequest(context) {
const { request, env, ctx } = context;
const sessionKV = env.SESSION_KV;
const assets = env.ASSETS;
const clientIP = request.headers.get('cf-connecting-ip');
const waitUntil = ctx.waitUntil.bind(ctx);
return await handleRequest(request, {
sessionKV, assets, clientIP, waitUntil
});
}

انتزاع cf()

cf(state, env, ctx) همه شش را در یک فراخوانی جمع می‌کند:

// ✅ Astro 6.4+
import { defineConfig } from 'astro/config';
import cloudflare from '@astrojs/cloudflare';
export default defineConfig({
output: 'server',
adapter: cloudflare({
advancedRouting: {
cf: true, // یک خط برای فعال کردن cf() helper
},
}),
});

مسیر ارتقای ایمن

مهاجرت سه فاز

ارتقا به Astro 6.4 را می‌توان به سه فاز تقسیم کرد:

۱. ارتقا: npx @astrojs/upgrade ۲. مهاجرت کانفیگ: انتقال remarkPlugins / rehypePlugins به processor: unified({...}) ۳. حسابرسی و تست: بررسی رندرینگ Markdown و سازگاری پلاگین‌ها

ماتریس تصمیم مهاجرت

پروژه‌های در ربع بالا-چپ (سایت‌های مستندات، سایت‌های آموزش فنی)—پلاگین کم، زمان build طولانی—بیشترین سود را از مهاجرت فوری می‌برند. آنهایی که در ربع پایین-راست هستند (وبلاگ‌های پلاگین-سنگین، سایت‌های بازاریابی بسیار سفارشی‌شده) باید اول معیار بگیرند و منتظر بلوغ اکوسیستم پلاگین شوند.

راه فرار: استفاده ترکیبی

import { defineConfig } from 'astro/config';
import { unified } from '@astrojs/markdown-remark';
import { sätteri } from '@astrojs/markdown-sätteri';
export default defineConfig({
markdown: {
processor: unified(),
contentCollections: {
docs: { processor: sätteri() },
blog: { processor: unified() },
},
},
});

نتیجه‌گیری: سرعت در مقابل اکوسیستم

Astro 6.4 سوالی می‌پرسد که هر چارچوب SSG بالاخره با آن مواجه می‌شود: آیا سرعت بومی ارزش فدا کردن سازگاری پلاگین را دارد؟

جواب Astro عمل‌گرایانه است—عجله نکنید، اما جهت مشخص است. Sätteri opt-in است، unified منسوخ شده اما هنوز حذف نشده. این پنجره انتقال به اکوسیستم زمان می‌دهد تا خود را تنظیم کند.

سه نکته برای برداشت:

۱. خط لوله Markdown حالا قابل اتصال است—یعنی در آینده می‌تواند پردازشگرهای Python، Go یا مرورگر وجود داشته باشد ۲. پروژه‌های محتوا-سنگین می‌توانند امروز به Sätteri سوئیچ کنند و نیمی از زمان build خود را کم کنند ۳. کاربران Cloudflare تقریباً هیچ دلیلی برای استفاده نکردن از cf() ندارند—شش خط اتصال را در یک خط فشرده می‌کند، بدون عوارض جانبی


References

Share this page