ما هو تدفق التحكم غير المتزامن في Node.js؟

Ma Hw Tdfq Althkm Ghyr Almtzamn Fy Node Js



تدفق التحكم هو طريقة التنفيذ التي يتم من خلالها تنفيذ العملية المقيمة لتطبيقك. يساعد هذا التدفق كثيرًا عندما تريد تنفيذ جزء معين من البرنامج بأكمله أولاً أو بعد الانتهاء من طريقة عشوائية. عادةً ما يتم تعيين تدفق التنفيذ بشكل غير متزامن أو متزامن وفقًا لطبيعة الطريقة المستخدمة.

تشرح هذه المقالة عمل وتنفيذ تدفق التحكم غير المتزامن في Node.js.

ما هو تدفق التحكم غير المتزامن في Node.js؟

يشير تدفق التحكم غير المتزامن في Node.js إلى الطريقة التي تدير بها وتتحكم في تدفق التنفيذ عند التعامل مع العمليات غير المتزامنة، مثل تقديم طلبات الشبكة، والتعامل مع الأحداث، وما إلى ذلك. على الرغم من أن Node.js مصمم خصيصًا لطبيعة غير متزامنة، فمن الأفضل التأكد من تنفيذ التعليمات البرمجية المحددة بالتسلسل المقصود وتنفيذ معالجة الأخطاء بشكل فعال.







لنأخذ مثالًا برمجيًا لتحسين مستوى فهم تدفق التحكم غير المتزامن:



كان fsObj = يتطلب ( 'خس' ) ;
// وظيفة رد الاتصال المجردة
وظيفة readFileAsync ( targetFilePath ) {
يعود جديد يعد ( ( حل، رفض ) => {
fsObj. إقرا الملف ( مسار الملف المستهدف, 'utf-8' , ( خطأ، محتوى ) => {
لو ( خطأ ) {
يرفض ( خطأ ) ;
} آخر {
حل ( محتوى ) ;
}
} ) ;
} ) ;
}

// وظيفة قراءة ملفات متعددة بالتسلسل
وظيفة غير متزامنة readFileSequentially ( ) {
يحاول {
مقدار ثابت file1Data = في انتظار readFileAsync ( 'mynewfile1.txt' ) ;
وحدة التحكم. سجل ( 'بيانات الملف الأول:' , file1Data ) ;

مقدار ثابت file2Data = في انتظار readFileAsync ( 'usecase.txt' ) ;
وحدة التحكم. سجل ( 'بيانات الملف الثاني:' , file2Data ) ;

مقدار ثابت file3Data = في انتظار readFileAsync ( 'package.json' ) ;
وحدة التحكم. سجل ( 'بيانات الملف الثالث:' , file3Data ) ;
} يمسك ( خطأ ) {
وحدة التحكم. خطأ ( 'حدث خطأ:' ، خطأ ) ;
}
}

readFileSequentially ( ) ;

شرح الكود أعلاه هو كما يلي:



  • أولاً، قم باستيراد ' خ 'وحدة وتخزين كائنها في' fsObj ' عامل.
  • ثم قم بتحديد ' قراءةFileAsync() 'وظيفة مسماة تحتوي على معلمة واحدة هي' targetFilePath 'الذي يحتوي على المسار للملف المستهدف.
  • ترجع هذه الدالة ' يعد ' الذي يحتوي على وظيفة رد الاتصال المطلوبة والتي تتكون من معلمتين هما ' حل ' و ' يرفض '.
  • داخل وظيفة رد الاتصال، قم باستدعاء ' إقرا الملف() 'الطريقة المقدمة من' خ ' وحدة. قم أيضًا بتمرير المعلمة المتوفرة لـ ' targetFilePath ' كمعلمة أولى للطريقة 'readFile ()'.
  • ال ' إقرا الملف 'يحتوي الأسلوب أيضًا على وظيفة رد الاتصال المطلوبة التي تحتوي على معلمات' خطأ ' و ' محتوى '. مرر ال ' خطأ ' داخل ال ' يرفض() 'طريقة في حالة حدوث أخطاء و' محتوى ' داخل ال ' حل() 'الطريقة في حالة عدم وجود خطأ.
  • الآن، قم بإنشاء دالة غير متزامنة باسم ' قراءة الملف التسلسلي () ''ويحتوي على'' حاول/قبض ' حاجز.
  • داخل ' يحاول ' كتلة، قم بإنشاء ثلاثة متغيرات لتخزين النتيجة التي تم إنشاؤها عن طريق استدعاء '' التي تم إنشاؤها بالفعل قراءةFileAsync() ' وظيفة. في كل مرة يتم تمرير مسار الملف المطلوب الذي يجب تنفيذه داخل قوس الوظيفة.
  • الكلمة المفتاحية “ انتظر يتم وضعه أيضًا خلف الوظيفة في وقت الاستدعاء لإيقاف تدفق التحكم حتى اكتمال إجراء قراءة الملف.
  • قم أيضًا بعرض المتغيرات على وحدة التحكم لعرض محتوى الملف المسترد أو المقروء.
  • أخيرًا، قم باستدعاء المحتوي على ' قراءة الملف التسلسلي () ' وظيفة.

من أجل التنفيذ، ضع الكود المذكور أعلاه في الملف الذي تريده بامتداد “ .js 'الموجود داخل مشروع Node.js الخاص بك. الملف الرئيسي في حالتنا هو ' controlFlow.js '، لذلك سيكون أمر التنفيذ لدينا كما يلي:





تدفق التحكم بالعقدة js

يوضح الإخراج الذي تم إنشاؤه أن البيانات الخاصة بالملفات المطلوبة باستخدام تدفق التحكم غير المتزامن يتم عرضها بالتسلسل:



ما هي الأسباب المحتملة وخطوات تجنب التعليمات البرمجية المحظورة لـ Node.js؟

يُعرف الرمز المتزامن أيضًا باسم ' رمز الكتلة ' حيث يقوم بإيقاف تنفيذ العمليات حتى تنفيذ عملية التشغيل. يؤدي هذا إلى ضعف أداء التطبيق واستجابته. يحدث حظر التعليمات البرمجية عادةً بسبب العمليات المتزامنة أو المرتبطة بوحدة المعالجة المركزية. الأسباب المحتملة لحظر التعليمات البرمجية وكيفية تجنبها مذكورة أدناه في الجدول:

أسباب حظر التعليمات البرمجية الحل لحظر التعليمات البرمجية
استخدام عمليات الملفات المتزامنة مثل fs.readFileSync(). استخدم عمليات الملفات غير المتزامنة مثل fs.readFile.
استخدام العمليات المرتبطة بوحدة المعالجة المركزية مثل الحسابات الثقيلة أو الحلقات طويلة الأمد. قم بإلغاء تحميل المهام المرتبطة بوحدة المعالجة المركزية إلى سلاسل العمليات عن طريق تقسيمها إلى أجزاء أصغر غير قابلة للحظر.
طلبات الشبكة الخارجية بطيئة بسبب استخدام طلبات HTTP لواجهات برمجة التطبيقات البعيدة استخدم مكتبات HTTP غير المتزامنة مثل Axios أو الوحدات النمطية 'http' أو 'https' المضمنة.
استعلامات قاعدة البيانات غير المحسنة تحسين استعلامات قاعدة البيانات باستخدام أدوات تحسين الاستعلام التي توفرها قاعدة البيانات.
استخدام حلقات لا نهائية أو حلقات ضيقة بدون فواصل. تأكد من أن الحلقات لها شروط الخروج وأنها لا تعمل إلى ما لا نهاية.

خاتمة

يستخدم تدفق التحكم غير المتزامن الكلمات الرئيسية ' غير متزامن/انتظار ' لتعديل أو التحكم في تدفق التنفيذ بطريقة غير متزامنة. يتم تلخيص رد الاتصال للطريقة غير المتزامنة المطلوبة وتخزينه في وظيفة منفصلة. يتم بعد ذلك استدعاء هذه الوظيفة بمساعدة الكلمة الأساسية wait بطريقة تسلسلية مع طرق أخرى حسب الرغبة. يتم تخزين هذه الوظائف في وظيفة أخرى مخصصة غير متزامنة والتي يتم استدعاؤها بعد ذلك لبدء التنفيذ. لقد شرح هذا الدليل تدفق التحكم غير المتزامن في Node.js.