مقالات عملية مرتبة حسب المجال والمستوى، اختر المجال المناسب واقرأ من مستوى مبتدئ إلى محترف.
لو بتدوّر في اللوجات ومش عارف طلب المستخدم مشي فين، AsyncLocalStorage يخلي requestId متاحًا في كل طبقة داخل Node.js بدون تمريره يدويًا في كل دالة.
لو TypeScript مطمنك إن بيانات الـ API صح، فهو غالبًا مطمنك زيادة. Zod يراجع JSON وقت التشغيل قبل ما يكسر الواجهة أو يخزن بيانات غلط.
لو زرار الصفحة بيتأخر بسبب حساب JavaScript تقيل، Web Workers تنقل الشغل لخيط منفصل وتسيب الواجهة تستجيب للمستخدم.
لو صفحة بتعتمد على 3 APIs، فشل reviews مش لازم يكسر السعر والمخزون. Promise.allSettled يخليك تعرض البيانات المتاحة وتتعامل مع الفشل بوضوح.
لو المستخدم بيكتب بسرعة في search box، ممكن طلب قديم يرجع بعد الطلب الجديد ويعرض بيانات غلط. AbortController بيوقف الطلبات القديمة بدل ما تسيبها تتسابق على الواجهة.
لو بتخزن metadata لكل request أو DOM node في Map عادية، ممكن تسيب آلاف الكائنات عايشة بعد ما شغلها خلص. WeakMap بتحل المشكلة لما المفتاح نفسه يختفي.
لو السيرفر وقع ثانيتين، كل الـ clients بتعمل retry في نفس اللحظة لما يرجع، فبتوقّعه تاني. Exponential Backoff + Jitter بيوزّع الطلبات على الزمن بدل ما تتكدّس. شرح بمثال بسيط، ثم الصيغة الرياضية من ورقة AWS، كود JavaScript شغّال، قياس فعلي على 10,000 client، وحالات ما تنفعش فيها.
لو عندك API بيخدم 10K مستخدم، ومستخدم واحد بيبعت 500 طلب في الثانية، ممكن يقفل السيرفر كله. Token Bucket بيوقّفه ويسيب الباقي شغّال بسلاسة. شرح بمثال تانك المياه، بعدها التعريف العلمي الدقيق، كود Node.js + Redis شغّال من 30 سطر، مقارنة مع Fixed Window، قياس فعلي، ومتى لا تستخدمه — بمصادر من Stripe وCloudflare وويكيبيديا.
لو المستخدم ضغط زر الدفع، النت قطع قبل ما يشوف الرد، ضغط تاني، النظام ممكن يسحب منه الفلوس مرتين. Idempotency Key بيحل المشكلة دي في 20 سطر. شرح بمثال ATM بسيط، ثم تعريف علمي دقيق، كود Node.js + Redis شغّال، قياس فعلي على 100K طلب/يوم، وحالات ما تنفعش فيها.