دعونا نلقي نظرة على ماهية عملية الحظر ؛
أقوم بمحاكاة طريقة Sleep () لتأخير طباعة Hello Star لمدة 10 ثوان.
requestHandlers.JS
نسخة الكود كما يلي:
وظيفة start () {
console.log ("تم استدعاء معالج الطلب" Start ".") ؛
وظيفة النوم (ميلي ثانية) {
var startTime = date date (). getTime () ؛
بينما (تاريخ جديد (). getTime () <starttime + millionseconds) ؛
}
النوم (10000) ؛
العودة "مرحبا ابدأ" ؛
}
وظيفة تحميل () {
console.log ("تم استدعاء معالج الطلب" تحميل ".") ؛
إرجاع "Hello Upload" ؛
}
orports.start = start ؛
orports.upload = تحميل ؛
عند الطلب /البدء ، تأخر بمقدار 10 ثوان قبل الطباعة.
عند الطلب/التحميل ، لن يتأثر.
بعد ذلك ، قم بتجربة:
أدخل http: // localhost: 8888/ابدأ في شريط العناوين في نافذة المتصفح الأولى ، ولكن لا تفتحها أولاً!
أدخل http: // localhost: 8888/تحميل في شريط العناوين في نافذة المتصفح الثاني. وبالمثل ، لا تفتحه أولاً!
نضغط على Enter في النافذة الأولى ("/start") وتبديل بسرعة إلى النافذة الثانية ("/expload") واضغط على Enter.
ملاحظة ، ما حدث:
استغرق عنوان URL /START 10 ثوان لتحميل ، وهو ما توقعنا.
استغرق عنوان URL /التحميل بالفعل 10 ثوان!
ولكن ليس لديها عملية مماثلة للنوم () في معالج الطلب المقابل. ما هي المشكلة؟
والسبب هو أن Start () يشمل عمليات حظر. لوضعه بوضوح ، "إنه يمنع جميع أعمال المعالجة الأخرى."
Node.js متاح واحد ، ويمكنه معالجة المهام بالتوازي دون إضافة مؤشرات ترابط إضافية.
إنه ينفذ عمليات متوازية من خلال حلقات الأحداث ، ويجب أن نستفيد تمامًا من هذا - تجنب حظر العمليات قدر الإمكان ، بدلاً من ذلك ، استخدام عمليات عدم الحظر في كثير من الأحيان.
في القسم التالي ، سنقدم كيفية تنفيذ عمليات عدم الحظر.