1. المشكلة في استخدام أجهزة ضبط الوقت في العقدة هي أنها ليست دقيقة. على سبيل المثال ، تقوم SetTimeOut () بتعيين مهمة ليتم تنفيذها بعد 10 مللي ثانية ، ولكن بعد 9 مللي ثانية ، تستغرق المهمة 5 مللي ثانية. عندما يكون الدوران الموقت مرة أخرى ، تم تأخيره بمقدار 4 مللي ثانية.
حسنًا ، هناك أشياء كثيرة لتقولها عن المؤقت في العقدة.
2. انظر إلى الكود:
نسخة الكود كما يلي:
Process.NextTick (function () {
console.log ("تأخير التنفيذ") ؛
}) ؛
console.log ("تنفيذ 1 بشكل طبيعي") ؛
console.log ("التنفيذ العادي 2") ؛
console.log ("التنفيذ الطبيعي 3") ؛
console.log ("التنفيذ العادي 4") ؛
من خلال هذا المثال ، أعتقد أن الجميع يمكن أن يروا بوضوح ما الذي يتم استخدام NextTick (). يستخدم بشكل أساسي للتنفيذ غير المتزامن.
النظر في الكود:
نسخة الكود كما يلي:
setImMediate (function () {
console.log ("تأخير التنفيذ") ؛
}) ؛
console.log ("التنفيذ الطبيعي") ؛
لقد وجدنا أن SetImmediate يتم تنفيذها أيضًا بشكل غير متزامن. إنه أمر غريب
إذن ما هو الفرق بينه وبين NextTick ()؟
انظر إلى الكود:
الرمز 1:
نسخة الكود كما يلي:
Process.NextTick (function () {
console.log ("تأخير NextTick")
}) ؛
setImMediate (function () {
console.log ("تأخير setImmediate") ؛
}) ؛
console.log ("التنفيذ الطبيعي") ؛
نتيجة:
الرمز 2:
نسخة الكود كما يلي:
setImMediate (function () {
console.log ("تأخير setImmediate") ؛
}) ؛
Process.NextTick (function () {
console.log ("تأخير NextTick")
}) ؛
console.log ("التنفيذ الطبيعي") ؛
نتيجة:
لقد وجدت أنه على الرغم من أن تسلسل الكود مختلف ، فإن نتائج التنفيذ هي نفسها.
من النتائج ، يمكننا أن نجد:
أولوية تنفيذ وظيفة الاتصال NextTick () أعلى من setImmediate () ؛
Process.NextTick () ينتمي إلى Ofle Observer ، و Setimmediate () ينتمي إلى مراقب التحقق. في كل جولة من عمليات فحص الحلقة ، يتقدم مراقب الخمول على مراقب I/O ، ومراقب I/O يتقدم على مراقب الاختيار.
في التنفيذ المحدد ، يتم تخزين وظيفة رد الاتصال في Process.NextTick () في صفيف.
يتم حفظ نتيجة setImMediate () في القائمة المرتبطة.
من حيث السلوك ، ستقوم Process.nextTick () بتنفيذ جميع وظائف رد الاتصال في الصفيف في كل حلقة.
يقوم SetImMediate () بتنفيذ وظيفة رد الاتصال في القائمة المرتبطة في كل حلقة.
نسخة الكود كما يلي:
// أضف 2 NextTick () وظائف رد الاتصال
Process.NextTick (function () {
console.log ("تنفيذ NextTick 1") ؛
}) ؛
Process.NextTick (function () {
console.log ("تنفيذ تأخير NextTick 2") ؛
}) ؛
// إضافة وظائف رد الاتصال setImmediate ()
setImMediate (function () {
console.log ("SetImmediate Lalays Execution 1") ؛
Process.NextTick (function () {
console.log ("insert strong") ؛
}) ؛
}) ؛
setImMediate (function () {
console.log ("SetImmediate Lalays Execution 2") ؛
}) ؛
console.log ("التنفيذ الطبيعي") ؛
من نتائج التنفيذ ، يمكن ملاحظة أنه عندما يتم تنفيذ وظيفة رد الاتصال الأولى () ، لا يتم تنفيذ الدالة الثانية على الفور ، ولكنها تدخل الجولة التالية من الحلقة ، وتنفذ مرة أخرى بترتيب أولوية NextTick () و setimmediate () مرات. سبب هذا التصميم هو التأكد من أنه يمكن تنفيذ كل حلقة بسرعة ومنع وحدة المعالجة المركزية من استهلاك الكثير وحظر مكالمات الإدخال/الإخراج اللاحقة.
ما سبق هو المعلومات حول الفرق بين NextTick () و setimmediate () في node.js. هل أنت واضح حول الفرق بينهما؟