أساسيات التخزين المؤقت للمخرجات
خزّنوا الاستجابات مؤقتًا لتقليل العمل
أساسيات التخزين المؤقت للمخرجات درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.
ما هو التخزين المؤقت للمخرجات؟
يخزّن التخزين المؤقت للمخرجات استجابة HTTP الكاملة لنقطة نهاية، بحيث تُخدم الطلبات المتكررة من ذاكرة التخزين المؤقت من دون إعادة تشغيل المعالج. ويقلل ذلك زمن الاستجابة والحمل بدرجة كبيرة لنقاط النهاية كثيفة القراءة.
// First call -> handler runs, response stored
// Next calls -> response served from cacheالتخزين المؤقت للمخرجات مقابل التخزين المؤقت للاستجابة
يخزّن التخزين المؤقت للمخرجات المدمج (المضاف في .NET 7) الاستجابات على الخادم، وتتحكم فيه بالكامل. أما التخزين المؤقت للاستجابة الأقدم، فلا يرسل سوى ترويسات التخزين المؤقت لـ HTTP، ويعتمد على العميل أو الوكلاء الوسيطين لاحترامها.
// Output caching: server-side store you control
// Response caching: just Cache-Control headersAddOutputCache
سجّل الخدمة باستخدام AddOutputCache.
builder.Services.AddOutputCache();UseOutputCache
أضف middleware إلى مسار المعالجة باستخدام UseOutputCache. وضعه بعد التوجيه، وبعد CORS إن وُجد.
var app = builder.Build();
app.UseOutputCache();
app.MapControllers();استخدام CacheOutput في نقطة نهاية
فعّل التخزين المؤقت لنقطة نهاية باستخدام CacheOutput (في Minimal API) أو السمة [OutputCache] (مع وحدات التحكم).
app.MapGet("/products", GetProducts)
.CacheOutput();
// Controller:
// [OutputCache]
// public IActionResult Get() => Ok(...);تعيين مدة انتهاء الصلاحية
تحكّم في المدة التي تظل خلالها الاستجابة مخزّنة مؤقتًا باستخدام Expire.
app.MapGet("/products", GetProducts)
.CacheOutput(policy => policy.Expire(TimeSpan.FromSeconds(30)));ما الذي يُخزَّن مؤقتًا
تُخزَّن افتراضيًا طلبات GET وHEAD التي تُرجع الحالة 200 فقط، وذلك عندما لا تكون هناك قيمة Set-Cookie أو مصادقة؛ إذ إن تخزين الاستجابات الخاصة بالمستخدمين المصادق عليهم مؤقتًا عن طريق الخطأ أمر خطير.
// Cached by default: GET/HEAD, 200, no cookies/authالتنويع حسب سلسلة الاستعلام
ينبغي عادةً تخزين طلبين للمسار نفسه، لكن بسلسلتي استعلام مختلفتين، بشكل منفصل. استخدم SetVaryByQuery.
app.MapGet("/search", Search)
.CacheOutput(policy => policy
.Expire(TimeSpan.FromSeconds(60))
.SetVaryByQuery("q", "page"));التنويع حسب الترويسة
يمكنك تغيير مفتاح ذاكرة التخزين المؤقت حسب الترويسات، مثلًا لتقديم نسخة مخزنة مؤقتًا مختلفة لكل قيمة من Accept-Language.
policy.SetVaryByHeader("Accept-Language");سياسة أساسية لكل شيء
تطبّق AddBasePolicy إعدادًا افتراضيًا على كل نقطة نهاية، مع إمكانية تجاوزه من نقاط النهاية الفردية.
builder.Services.AddOutputCache(options =>
{
options.AddBasePolicy(policy =>
policy.Expire(TimeSpan.FromSeconds(10)));
});تعطيل التخزين لنقطة نهاية
إذا كانت إحدى السياسات الأساسية تخزّن كل شيء مؤقتًا، فاستبعد نقاط النهاية الديناميكية باستخدام NoCache.
app.MapGet("/cart", GetCart)
.CacheOutput(policy => policy.NoCache());تحقق سريع
تأكّد من الفرق بين ميزتي التخزين المؤقت.
مراجعة
لقد تعلّمت أساسيات تخزين المخرجات مؤقتًا:
- يؤدي استخدام
AddOutputCacheمعUseOutputCacheإلى تفعيل التخزين المؤقت من جهة الخادم. - يعمل
CacheOutputو[OutputCache]على تفعيل التخزين المؤقت لنقاط النهاية، بينما يحدّدExpireالمدة. - تُخزَّن افتراضيًا استجابات GET وHEAD ذات الحالة 200 فقط، ما لم تتضمن مصادقة أو ملفات تعريف ارتباط.
- يحدّد
SetVaryByQueryوSetVaryByHeaderمحتوى مفتاح ذاكرة التخزين المؤقت.
التالي: سياسات التخزين المؤقت وإبطالها.
الأسئلة الشائعة
هل درس «أساسيات التخزين المؤقت للمخرجات» مجاني؟
نعم — نص درس «أساسيات التخزين المؤقت للمخرجات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.
ماذا ستتعلم في «أساسيات التخزين المؤقت للمخرجات»؟
خزّنوا الاستجابات مؤقتًا لتقليل العمل تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «أساسيات التخزين المؤقت للمخرجات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- خوارزميات تحديد معدل الطلبات
- تهيئة Middleware تحديد معدل الطلبات
- أساسيات التخزين المؤقت للمخرجات
- سياسات التخزين المؤقت وإبطالها