تخيل أنك تبني نظام بحث؛ لو قمت بإرسال طلب للسيرفر مع كل حرف يكتبه المستخدم، ستنهار قاعدة البيانات! هنا نستخدم تقنيات "التهدئة".
- Debounce: انتظر حتى يتوقف المستخدم عن الكتابة تماماً لمدة (مثلاً 500ms) ثم نفذ الأمر.
- Throttle: نفذ الأمر مرة واحدة فقط كل (مثلاً ثانية) مهما حاول المستخدم الضغط على الزر بسرعة.
مثال الـ Debounce (احترافي):
let timer;
input.addEventListener('keyup', () => {
clearTimeout(timer);
timer = setTimeout(() => {
console.log("تم إرسال طلب البحث للسيرفر...");
}, 500);
});
11. الأدوات السرية (Symbols & Generators)
هذه الأدوات تُستخدم لبناء مكتبات (Libraries) أو أنظمة معقدة تحتاج لخصوصية عالية أو تحكم في تدفق البيانات.
Symbols: لإنشاء مفاتيح "فريدة ومخفية" داخل الكائنات لا يمكن لأي كود آخر الوصول إليها بالصدفة.
Generators: دوال يمكن "إيقافها" مؤقتاً ثم استكمالها لاحقاً (تستخدم الكلمة المفتاحية yield).
في PhineX، لا نكتب كوداً يعمل فحسب، بل نكتب كوداً يستطيع الآخرون قراءته وتطويره بعدنا.
قواعد ذهبية:
1. تجنب الأرقام السحرية: لا تكتب if(x === 86400) بل عرف متغيراً const SECONDS_IN_DAY = 86400.
2. وظيفة واحدة لكل دالة: الدالة التي تحسب السعر يجب ألا تقوم بتغيير لون الزر!
3. الأسماء الوصفية: استخدم gamePrice بدلاً من gp.
اختبار المحترف 🧠
س1: ماذا يحدث للمتغير المرفق بـ let داخل دالة عند استدعائه من خارجها؟
س2: ما هي فائدة الـ constructor داخل الـ Class؟
س3: في الـ Arrow Function، هل يمكننا استخدام الكلمة المفتاحية function؟
س4: ماذا يفعل الـ Spread Operator `...` عند استخدامه مع مصفوفة؟
س5: أي من التالي يُمسح تلقائياً عند إغلاق المتصفح؟