الدرس 8 من 8
ذاكرة مؤقّتة للطلبات
- 14 دقيقة
- 5 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
طلب واحد لكل معرّف
الشرح
إذا كانت في الصفحة خمسة مكوّنات تطلب بيانات المستخدم نفسه، ذهبت إلى الخادم خمسة طلبات متطابقة، وذاكرة مؤقّتة بسيطة (cache) تجعلها طلبًا واحدًا، وهي Map تربط كل معرّف بطلبه.
والفخّ في ما تحفظه، فإن حفظت النتيجة بعد await وجدت كل الاستدعاءات التي تأتي في اللحظة نفسها الذاكرةَ فارغة، فترسل كلّها طلباتها معًا. لذلك احفظ الوعد نفسه لحظة إرسال الطلب، فيشترك كل من يسأل بعدها في الطلب الجاري حتى لو لم ينتهِ بعد.
ولحفظ الوعد ثمن، لأن الوعد المرفوض يبقى مرفوضًا، فإذا فشل الطلب فاحذفه من الذاكرة، وإلا بقي المستخدم عالقًا على الخطأ حتى يعيد تحميل الصفحة.
المطلوب
اجعل getUser(id) تطلب كل معرّف من الشبكة مرّة واحدة فقط، حتى لو استُدعيت له عدّة مرّات في اللحظة نفسها، واحذفه من الذاكرة إذا فشل طلبه.
الفحوص
5 فحوص- الدالة getUser تُرجع المستخدم المطلوب
- الاستدعاء المكرّر يأخذ نتيجته من الذاكرة
- الاستدعاءات في اللحظة نفسها تشترك في طلب واحد
- كل معرّف له طلبه ونتيجته
- الطلب الفاشل لا يبقى في الذاكرة