JavaScript المتزامنة وغير المتزامنة
تعمل JavaScript على مسار واحد (single thread). وهذا يعني أنها تنفذ شيئاً واحداً في كل مرة. يجب عليك فهم كيفية تعاملها مع المهام لكتابة كود فعال.
Synchronous JavaScript
يعمل الكود المتزامن سطراً بسطر. تنتظر كل مهمة انتهاء المهمة السابقة. يُسمى هذا بالحظر (blocking). إذا استغرقت إحدى المهام وقتاً طويلاً، يتوقف البرنامج بأكمله.
- التنفيذ: تسلسل ثابت.
- الحظر: نعم.
- التعقيد: بسيط.
- الأفضل لـ: المهام البسيطة والمتسلسلة.
Asynchronous JavaScript
يعمل الكود غير المتزامن بشكل مستقل. لا تحظر المهام الكود الآخر أثناء انتظارها. يُسمى هذا بعدم الحظر (non-blocking). تبدأ المهمة في الخلفية وتُخطرك عند انتهائها.
- التنفيذ: تعمل المهام بشكل مستقل.
- الحظر: لا.
- التعقيد: أعلى.
- الأفضل لـ: استدعاءات API، والمؤقتات، وعمليات الملفات.
ثلاث طرق للتعامل مع المهام غير المتزامنة:
- Callbacks: دالة تعمل بعد انتهاء المهمة.
- Promises: كائن يمثل اكتمال العملية أو فشلها.
- Async/Await: الطريقة الأكثر نظافة. تجعل الكود غير المتزامن يبدو مثل الكود المتزامن دون حظر المسار.
العمليات غير المتزامنة الشائعة:
- المؤقتات:
setTimeout() - استدعاءات API:
fetch() - قراءة الملفات:
readFile() - أحداث المستخدم:
addEventListener()
يقوم الـ Event Loop بجعل هذا العمل ممكناً. فهو يستخدم الـ Call Stack، و Web APIs، و Callback Queue لإدارة مهام متعددة في وقت واحد.
Summary:
- المتزامن: واحدة تلو الأخرى. يحظر التنفيذ.
- غير المتزامن: مهام مستقلة. لا يحظر التنفيذ.
- الوضع الافتراضي لـ JavaScript: متزامن.
المصدر: https://www.geeksforgeeks.org/javascript/synchronous-and-asynchronous-in-javascript/ المصدر: https://www.w3schools.com/js/js_asynchronous.asp المصدر: https://medium.com/@mohdtalib.dev/what-is-synchronous-and-asynchronous-in-javascript-07adb7b4cc5f
المنشور الكامل: https://dev.to/raja_b_0c9d242e2c26cf063b/javascript-synchronous-and-asynchronous-2a69