دوال JavaScript، والخيوط (Threads)، والتنفيذ غير المتزامن (Asynchronous Execution)
يجب عليك فهم كيفية عمل JavaScript من الداخل.
إليك شرح مفصل للدوال، والعمليات (Processes)، والخيوط (Threads)، وأنماط التنفيذ.
أنواع دوال JavaScript
- الدالة المسماة (Named Function): تستخدم اسماً محدداً، مما يسهل عملية تصحيح الأخطاء (Debugging).
- الدالة المجهولة (Anonymous Function): ليس لها اسم، وغالباً ما تُستخدم كدوال استدعاء (Callbacks).
- تعبير الدالة (Function Expression): حيث تقوم بتعيين دالة لمتغير ما.
- الدالة السهمية (Arrow Function): صيغة مختصرة تستخدم الرمز
=>. - IIFE: تعبير الدالة المستدعاة فوراً (Immediately Invoked Function Expression)، حيث تعمل بمجرد تعريفها.
العملية (Process) مقابل الخيط (Thread)
العملية (Process) هي برنامج يعمل على جهاز الكمبيوتر الخاص بك.
- لكل عملية ذاكرتها الخاصة.
- إذا تعطلت عملية واحدة، تستمر العمليات الأخرى في العمل.
- مثال: متصفح Chrome وتطبيق Spotify هما عمليتان منفصلتان.
الخيط (Thread) هو وحدة صغيرة داخل العملية.
- تتشارك الخيوط في نفس الذاكرة.
- تسمح للبرنامج الواحد بالقيام بأشياء كثيرة في وقت واحد.
- مثال: داخل Chrome، يقوم خيط برسم الصفحة بينما يتعامل خيط آخر مع نقرات الماوس الخاصة بك.
المتزامن (Synchronous) مقابل غير المتزامن (Asynchronous)
لغة JavaScript أحادية الخيط (single-threaded)، حيث تتعامل مع مهمة واحدة في كل مرة باستخدام مكدس الاستدعاء (Call Stack).
التنفيذ المتزامن (Synchronous Execution):
- المهام تعمل واحدة تلو الأخرى.
- تنتظر كل مهمة انتهاء المهمة السابقة.
- المهام البطيئة تمنع الكود الخاص بك من التنفيذ (Blocking).
التنفيذ غير المتزامن (Asynchronous Execution):
- المهام تعمل في الخلفية.
- لا يتوقف الكود أثناء انتظار انتهاء المهمة.
- يعتمد هذا على Web APIs، وطابور الاستدعاء (Callback Queue)، وحلقة الأحداث (Event Loop).
كيف يعمل التنفيذ غير المتزامن:
- ترسل JavaScript مهمة (مثل مؤقت) إلى Web API.
- يستمر الكود الأساسي في العمل.
- بمجرد انتهاء المهمة، تنتقل إلى طابور الاستدعاء (Callback Queue).
- تقوم حلقة الأحداث (Event Loop) بنقلها إلى مكدس الاستدعاء (Call Stack) عندما يكون المكدس فارغاً.
هذا يحافظ على سرعة تطبيقات الويب الخاصة بك واستجابتها.