"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > الأنماط غير المتزامنة في Node.js - البرنامج التعليمي Node.js - الجزء 6

الأنماط غير المتزامنة في Node.js - البرنامج التعليمي Node.js - الجزء 6

تم النشر بتاريخ 2024-11-02
تصفح:968

Async Patterns in Node.js - Node.js Tutorial - Part 6

الأنماط غير المتزامنة في Node.js

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

كتابة كود المزامنة مقابل المزامنة

كود متزامن

يتم تنفيذ التعليمات البرمجية المتزامنة خطوة واحدة في كل مرة، مما يعني أنه يجب إكمال كل خطوة قبل الانتقال إلى الخطوة التالية. يمكن أن يؤدي هذا إلى حظر الخيط الرئيسي إذا كانت العمليات بطيئة (على سبيل المثال، قراءة ملف كبير أو الاستعلام عن قاعدة بيانات).

مثال (الكود المتزامن):

const fs = require('fs');

const data = fs.readFileSync('file.txt', 'utf8');
console.log(data);
  • المشكلة: إذا استغرق readFileSync وقتًا طويلاً (على سبيل المثال، الملف كبير)، فسيتم حظر التطبيق بالكامل خلال هذه الفترة.

رمز غير متزامن

من ناحية أخرى، لا يمنع الكود غير المتزامن الخيط الرئيسي. بدلاً من انتظار اكتمال العملية، يستمر البرنامج في التنفيذ ويتعامل مع نتيجة العملية غير المتزامنة عندما تصبح جاهزة.

مثال (الكود غير المتزامن):

const fs = require('fs');
// Call Back
fs.readFile('file.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

console.log('This will log before the file content!');
  • في هذا المثال، تتم قراءة الملف بشكل غير متزامن، ولا يتم حظر البرنامج؛ يتم تنفيذ السطر console.log('هذا سيتم تسجيله قبل محتوى الملف!') بينما لا يزال الملف قيد القراءة.

متى يتم استخدام متزامن مقابل غير متزامن

  • الرمز المتزامن جيد للمهام الصغيرة أو البرامج النصية حيث لا يشكل الأداء مصدر قلق.
  • يعتبر الكود غير المتزامن مثاليًا لتطبيقات الإدخال/الإخراج الثقيلة مثل خوادم الويب، حيث لا تريد حظر سلسلة الرسائل الرئيسية أثناء انتظار عمليات مثل استعلامات قاعدة البيانات أو طلبات HTTP.

غير متزامن / انتظار
تم تقديم async/await في ES2017 (Node.js 7.6)، وهو سكر نحوي مبني على الوعود. فهو يسمح بكتابة التعليمات البرمجية غير المتزامنة بطريقة تشبه المزامنة، مما يجعلها أكثر قابلية للقراءة وأسهل للصيانة.

مثال (غير متزامن/انتظار):

const fs = require('fs').promises; وظيفة غير متزامنة readFile () { يحاول { بيانات ثابتة = انتظار fs.readFile('file.txt', 'utf8'); console.log(data); } مسك (يخطئ) { console.error(err); } } readFile();
   const fs = require('fs').promises;

   async function readFile() {
     try {
       const data = await fs.readFile('file.txt', 'utf8');
       console.log(data);
     } catch (err) {
       console.error(err);
     }
   }

   readFile();
ملخص

  • عمليات الاسترجاعات بسيطة ولكنها يمكن أن تؤدي إلى جحيم رد الاتصال.
  • الوعود تنظيف جحيم رد الاتصال وتوفير معالجة أفضل للأخطاء.
  • Async/Await يجعل التعليمات البرمجية غير المتزامنة تبدو متزامنة، مما يحسن إمكانية القراءة.
يعتمد اختيار رمز المزامنة مقابل رمز المزامنة على حالة الاستخدام الخاصة بك. بالنسبة لعمليات الإدخال/الإخراج الثقيلة، تفضل دائمًا الأنماط غير المتزامنة للحفاظ على عدم حظر مؤشر الترابط الرئيسي واستجابة تطبيقك.

شكرًا لك على القراءة، وسعيدة بالبرمجة! ?

بيان الافراج تم نشر هذه المقالة على: https://dev.to/hakimmohamed/async-patterns-in-nodejs-1e10?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3