ستوافق ، خاصة إذا كنت لا تزال جديدًا في البرمجة ، على أن بعض مصطلحات الترميز مخيفة.
بالنسبة لبعض المطورين ، تندرج مصطلحات مثل "غير متزامن" و "البرمجة المتزامنة" ضمن مصطلحات الترميز المربكة ولكنها غالبًا ما تستخدم. إذن ماذا تعني هذه المصطلحات؟ كيف هم مختلفون؟ وكيف تعمل؟ سنجيب على كل هذه الأسئلة وأكثر.
كيف تعمل البرمجة المتزامنة
تقوم تطبيقات الويب المتزامنة بتحميل الموارد بشكل فردي ومتسلسل ، بحيث عندما يفشل تحميل مورد أو مكون أعلى في التسلسل الهرمي ، فلن يستجيب أولئك الموجودون أدناه.
الطلبات التي تجريها تعمل بشكل متزامن مع بروتوكول متعدد الخيوط.
ملحوظة: الخيط هو عامل واحد أو قناة واحدة تتعامل مع الطلبات في البرمجة.
كل من هذه المواضيع يعالج الطلبات بشكل منفصل في البرمجة المتزامنة. لذلك كل سلسلة رسائل لها وقت التنفيذ الخاص بها ويتم تحميلها بالكامل قبل تنفيذ الحدث التالي. وبالتالي ، يؤدي تنفيذ الحدث في مؤشر ترابط إلى إغلاق مؤشرات الترابط الأخرى ، مما يؤدي إلى حظر واجهة المستخدم بالكامل في العملية.
عادةً ما تقوم تطبيقات الويب التي تعمل فقط على البرمجة المتزامنة بتحميل الموارد بشكل يعتمد على القفل. دائمًا ، يجب تحميل كل عملية ، بما في ذلك طلبات POST و GET ، بشكل جديد لكل طلب واستجابة.
لذلك ، تضمن المكالمات المتزامنة حصول العميل أو المستعرض على استجابة من الطلب الأول قبل تنفيذ الطلب التالي. يمكن أن يؤدي هذا إلى تأخيرات غير ضرورية وتجربة سيئة للمستخدم.
متعلق ب: كيفية كتابة كود متعدد الخيوط في جافا
على سبيل المثال ، أثناء محاولة إرسال نموذج على موقع ويب يتم تشغيله بشكل متزامن ، بعد ملء الحقول اللازمة وإرسال النموذج ، يقوم العميل (المستعرض) بتأمين حقل النموذج بالكامل.
لذلك يمنعك من إجراء المزيد من التحديثات على حقل النموذج أو النقر فوق أي جزء آخر من تطبيق الويب أثناء الإرسال.
متعلق ب: كيفية تثبيت Node.js و npm على نظام Windows
فيما يلي مثال على بعض التعليمات البرمجية المتزامنة التي تقرأ محتوى ملف بامتداد خ الوحدة النمطية في node.js:
var fs = تتطلب ('fs') ؛
const readData = fs.readFileSync ('text.txt') ؛
console.log (readData.toString ()) ؛
setTimeout (() => {
console.log ("مرحبًا بالعالم ، أحظر سلاسل الرسائل الأخرى ...")
}, 1000
);
يستخدم الرمز أعلاه readFileSync طريقة للحصول على محتوى ملف نصي ، لكنها لا تستخدم وظيفة رد الاتصال.
كيف تعمل البرمجة غير المتزامنة
في البرمجة غير المتزامنة ، تقدم التطبيقات الطلبات والاستجابات باستخدام بروتوكول الإدخال والإخراج (I / O) غير المحظور. على عكس البرمجة المتزامنة ، لا يقوم البرنامج غير المتزامن بتنفيذ العمليات بشكل هرمي. لذلك لن ينتظر البرنامج تنفيذ طلب قبل الرد على طلب آخر.
في جوهره ، ينفذ الطلبات في وقت واحد ، حتى لو كانت في وظائف مختلفة. نتيجة لذلك ، يقوم التطبيق الذي تم تطويره باستخدام البرمجة غير المتزامنة بتحميل المحتوى بالكامل مرة واحدة فقط.
يتعامل موضوع واحد مع طلبات متعددة في حلقة حدث. لذا ، فإن فشل أحد الطلبات لا يؤثر على الآخر.
نظرًا لأن التحميل غير المتزامن غير محظور ، فقد ينتهي الأمر بتطبيقات الويب التي تعمل وفقًا لهذا المبدأ إلى أن تكون تطبيقات ذات صفحة واحدة.
على سبيل المثال ، على عكس البرمجة المتزامنة ، بعد ملء النموذج وإرساله ، ترسله الوظيفة بشكل غير متزامن دون قفل الحقول الأخرى أو واجهة المستخدم بأكملها. لذلك ، يمكنك تحديث حقول النموذج الأخرى وتقديم المزيد من الطلبات على تطبيق الويب أثناء استمرار الإرسال.
وبالتالي ، لا يتعين عليك انتظار الطلبات لأنها تعمل جميعًا في حلقة واحدة. لذلك ، على عكس التطبيقات المتزامنة ، تمنح التطبيقات غير المتزامنة تجربة مستخدم أفضل وهي بنفس السرعة.
متعلق ب: كيفية تثبيت إصدارات متعددة من Node.js وإدارتها على نظام Linux
فيما يلي مثال لما تبدو عليه الشفرة غير المتزامنة في node.js:
var fs = تتطلب ('fs') ؛
fs.readFile ('text.txt' ، الوظيفة (الخطأ ، البيانات) {
إذا (يخطئ) {
console.log ('عذرًا ، حدث خطأ') ؛
}
setTimeout (() => {
console.log (data.toString ())
}, 1000);
});
setTimeout (() => {
console.log ("مرحبًا بالعالم ، لا أحظر سلاسل الرسائل الأخرى ...")
}, 500
);
بخلاف الطريقة المتزامنة السابقة ، يستخدم الرمز غير المتزامن أعلاه وظيفة رد الاتصال لتخصيص رسائل الخطأ.
دعم اللغة للبرمجة المتزامنة وغير المتزامنة
تقوم معظم اللغات الموجودة على جانب الخادم مثل Python و C # و Java و PHP بتنفيذ التعليمات البرمجية اعتمادًا على ذلك ، لذا فإن نجاح سطر واحد أو كتلة كاملة يعتمد على نجاح ما يسبقه. هذا يعني أنهم جميعًا متزامنون بشكل افتراضي.
على الرغم من أن معظم هذه اللغات من جانب الخادم تدعم الآن المكالمات غير المتزامنة مع التطورات الحديثة ، إلا أن أيا منها غير متزامن افتراضيًا.
متعلق ب: كيفية اختيار لغة برمجة الويب الصحيحة
Node.js ، إطار عمل JavaScript بارز من جانب الخادم ، هو مثال على وقت تشغيل مترابط يدعم البرمجة غير المتزامنة. أصبحت مهام Async / Await ممكنة الآن مع C # أيضًا.
إيجابيات وسلبيات البرمجة المتزامنة وغير المتزامنة
بينما قد تعتقد أن البرمجة غير المتزامنة تفوز هنا ، فإن لكلتا الطريقتين إيجابيات وسلبيات. لذا ، فإن استخدام أي منهما يعتمد على تفضيلاتك أو المشكلة المطروحة.
ومع ذلك ، كلاهما أفضل من بعضهما البعض بطرق مختلفة. دعنا نلقي نظرة على إيجابيات وسلبيات كل من طرق البرمجة هذه.
إيجابيات البرمجة غير المتزامنة
- يتم تحميل جميع البرامج النصية واحدًا تلو الآخر. هذا يعادل السرعة والاستجابة وتجربة مستخدم أفضل.
- يزيل تأخيرات تحميل الصفحة. لذلك ، ليست هناك حاجة لتحديثات الصفحة اللاحقة أثناء تنفيذ الطلبات الجديدة.
- يمكنك استخدام ميزات متعددة في نفس الوقت ، حتى أثناء استمرار تشغيل الطلبات الأخرى.
- التطبيقات غير المتزامنة قابلة للتطوير بدرجة كبيرة وتتطلب القليل من الموارد للعمل.
- حتى إذا كان أحد الطلبات بطيئًا في الاستجابة ، فإنه لا يؤثر على وقت استجابة الآخرين.
- فشل الخيط لا يمنع الآخرين من التقديم.
- تتيح لك عمليات الاسترجاعات المضمنة تخصيص رسائل الخطأ.
سلبيات البرمجة غير المتزامنة
- يتطلب الكثير من عمليات الاسترجاعات والوظائف العودية التي قد تكون مرهقة أثناء التطوير.
- إذا لم يتم استخدام عمليات الاسترجاعات بشكل فعال ، فلا توجد طريقة يمكن للمستخدم من خلالها معرفة ما إذا كان الطلب قد فشل أم لا ، خاصة أثناء إجراء طلبات POST.
- يمكن أن يؤثر وقت الاستجابة في عرض الصفحة الأولي على تجربتك.
- قد يكون من الصعب الزحف إلى تطبيقات الويب التي تستخدم التحميل غير المتزامن لمحركات البحث مثل Google و Bing.
- قد يكون من الصعب تنفيذ البرمجة النصية غير المتزامنة في بعض لغات البرمجة.
- يمكن أن تصبح التعليمات البرمجية فوضوية ويصعب تصحيحها.
إيجابيات البرمجة المتزامنة
- يتطلب معرفة أقل في الترميز وهو مدعوم من قبل جميع لغات البرمجة.
- حتى إذا لم تكن هناك عمليات رد اتصال مخصصة لإخفاقات الطلب ، فمن الواضح لك على الفور أن العميل (المستعرض) يتعامل مع مثل هذه الأخطاء افتراضيًا.
- من الأفضل تنفيذ مهام وحدة المعالجة المركزية.
- تجد محركات البحث صفحات الويب المتزامنة أسهل في الزحف.
- مثالي لتقديم طلبات بسيطة.
سلبيات البرمجة المتزامنة
- يمكن أن يكون وقت التحميل بطيئًا.
- لا توجد طرق رد اتصال مضمنة.
- عندما يتم قفل الخيط ، يتم حظر الآخرين أيضًا.
- قد يؤدي عدم القدرة على تنفيذ عمليات متعددة في وقت واحد إلى تقليل تجربة المستخدم.
- بمجرد فشل الطلب ، يصبح البرنامج بأكمله غير مستجيب أيضًا.
- قد تكون هناك حاجة إلى قدر كبير من الموارد للتعامل مع المزيد من سلاسل الرسائل إذا أصبحت الطلبات ساحقة.
البرمجة المتزامنة أو غير المتزامنة: أيهما أفضل؟
في حين أن البرمجة المتزامنة يمكن أن تكون بطيئة وغير متزامنة تضرب البرمجة بسرعة ، فإن التعرف على الطريقة المناسبة لأي سيناريو هو المفتاح. في بعض الأحيان ، يعملون معًا.
عمليات الواجهة الخلفية مثل CRUD (إنشاء وقراءة وتحديث وحذف) متزامنة بشكل افتراضي. ولكن يمكنك أيضًا أن تقرر تنفيذ عمليات CRUD بشكل غير متزامن. ما عليك سوى تعديل البرنامج النصي للواجهة الأمامية للاتصال بكود الواجهة الخلفية. على سبيل المثال ، يمكنك تقديم البيانات من قاعدة البيانات بشكل متزامن. ثم يمكنك تقديمها للمستخدمين باستخدام البرمجة النصية غير المتزامنة.
بالإضافة إلى ذلك ، قد لا يكون استخدام البرمجة غير المتزامنة لإنشاء تطبيقات بسيطة للواجهة الأمامية أو تنفيذ عمليات وحدة المعالجة المركزية التي تتطلب موارد أقل أمرًا مثاليًا.
يعد تعلم تطوير الويب طريقة رائعة لفهم الترميز ، ولكن من أين يجب أن تبدأ: تطوير الويب للواجهة الأمامية أو الخلفية؟
اقرأ التالي
- برمجة
- برمجة
Idowu شغوف بأي شيء التكنولوجيا الذكية والإنتاجية. في أوقات فراغه ، يلعب بالبرمجة ويتحول إلى رقعة الشطرنج عندما يشعر بالملل ، لكنه أيضًا يحب الابتعاد عن الروتين من حين لآخر. يحفزه شغفه بإظهار طريقة حول التكنولوجيا الحديثة للناس على كتابة المزيد.
اشترك في نشرتنا الإخبارية
انضم إلى النشرة الإخبارية لدينا للحصول على نصائح تقنية ومراجعات وكتب إلكترونية مجانية وصفقات حصرية!
خطوة أخرى أيضا…!
يرجى تأكيد عنوان بريدك الإلكتروني في البريد الإلكتروني الذي أرسلناه لك للتو.