البناء بقى أسرع لأن الحتت التقيلة نزلت لتحت
Astro 7 بيركّب على Vite 8 و Rolldown (مجمّع Rust بديل لـ Rollup و esbuild في المسار ده). كومبايلر ملفات .astro اتكتب من الأول بـ Rust، و Markdown بقى على Sätteri، والرندر بقى بطابور بدل نداءات راجعة على نفسها. الأرقام بتختلف حسب الموقع. المكسب الأكبر لما Markdown والتمجييع هما البطء.
الكومبايلر الجديد أصرّم من بتاع Go:
- تاج HTML مش متقفّل بقى خطأ، مش بيتعمله إصلاح في السر.
- مش بيرتّب التاجات الغلط عشان “يظبطها”. المتصفح هيشوفها زي ما كتبتها.
divجوّهpكان زمان يتظبط لوحده. - المسافات بين العناصر inline بقت زي JSX. سطرين
<span>ورا بعض ممكن يلزقوا. مسافة مقصودة تكتبها{" "}، أو رجّع القديم بـcompressHTML: true.
Sätteri افتراضي، وفيه GFM والجداول والـ heading ids من غير إضافات remark. إضافات remark و rehype محتاجة @astrojs/markdown-remark و markdown.processor: unified({ remarkPlugins }). المفاتيح القديمة remarkPlugins على markdown لسه ماشية بس بعد ما الحزمة تتسطّب، وهي في طريقها تتساب.
@astrojs/db اتشال في ٧. بديله Drizzle أو node:sqlite لو على Node، أو قاعدة الاستضافة.
أنبوب الطلب: src/fetch.ts
الملف ده محجوز. Astro بيقراه كمدخل راوتر، زي middleware.ts. لو عندك ملف بالاسم ده لسبب تاني، سمّه أو عطّل الميزة بـ fetchFile: null، أو وجّه fetchFile لاسم تاني.
من غير الملف، السلوك زي الأول. بالملف، أنت ترتّب الخطوات. astro() من astro/fetch يشغّل الأنبوب الافتراضي كله. أو تركّب القطع: جلسات، كاش، تحويلات، actions، middleware، صفحات، i18n.
ده حل لمشكلة قديمة: الـ middleware أحيانًا كان بيوصل بعد الـ Action. لو التحقق لازم يمنع أكشن مش موثّق، حطه قبله في الأنبوب. فيه جسر لـ Hono لو عندك middlewares جاهزة. التفاصيل وأسماء الدوال في مرجع astro/fetch.
src/fetch.ts إلا لما ترتيب الافتراضي يقف قصادك.
كاش الصفحات الحية
صفحات السيرفر كانت يا تتقفل في البناء يا تتنفّذ كل مرة. route cache ثبات من Astro 7: تقول مدة الصلاحية، والـ provider ينفّذ.
import { defineConfig, memoryCache } from "astro/config";export default defineConfig({ cache: { provider: memoryCache() }, routeRules: { "/menu/[...path]": { maxAge: 120, swr: 60 }, },});أو من الصفحة: Astro.cache.set بـ maxAge و swr و tags. swr يعني اخدم النسخة القديمة ثواني وأنت بتجهّز الجديدة. الوسوم عشان تمسح مجموعة من غير ما تمسح الموقع: cache.invalidate({ tags: ["menu"] }) من endpoint ويب هوك الـ CMS، وبعد ما تتأكد إن الطلب فيه سر.
مدخل حي من getLiveEntry ممكن يتبعت للكاش لو اللودر رجّع تلميح. memoryCache كويس على Node. مزوّدو CDN لـ Netlify و Vercel و Cloudflare لسه بيتفعّلوا يدويًا في المرحلة التجريبية، والهدف إن الضربة تترد من الحافة من غير ما الدالة تصحى. راجع الدليل قبل ما تعتمد على اسم الاستيراد لأنهم لسه تجريبيين.
قرارات المحترف
مقال، منيو، لاندينج، توثيق. مجموعة بناء + Image.
صندوق شخصي على صفحة ثابتة: server:defer.
Action بـ Zod. جلسة لو النتيجة هتعيش بعد تحويل.
مجموعة حية + كاش بوسم + ويب هوك يمسح الوسم.
ترقية من ٦ لـ ٧: pnpm dlx @astrojs/upgrade، شيل أعلام experimental اللي بقت افتراضي (الكاش و الكومبايلر والطابور والراوتر المتقدم)، وانقل cache و routeRules لجذر الكونفج.
خلّصت الفصل لما
١) تاج p من غير قفل في Astro 7؟
٢) إضافات remark تشتغل لوحدها في Astro 7؟
@astrojs/markdown-remark ومعالج unified.٣) memoryCache من غير ما تمسح الوسم، السعر الجديد يظهر امتى؟
maxAge، أو فورًا لو عملت invalidate للوسم.