المفاهيم الأساسية
Node.js ، أو Node ، عبارة عن منصة تسمح لـ JavaScript بالتشغيل على جانب الخادم. يمكن القول أن Node.js رائدة في التطور المعياري لـ javascript . كانت متطلبات javascript المبكرة بسيطة للغاية ، وقد كتبت بشكل أساسي كوظائف ، تليها الكتابة الموجهة نحو العملية. في وقت لاحق ، تم تقديم أفكار التنمية الموجهة نحو الكائن تدريجياً ، ثم كتبت ببطء إلى فصول. أخيرًا ، بدأ ظهور Node.js في الحصول على مفهوم التطور المعياري لـ JS ، والذي أدى إلى التخلص من رمز js المتضخم مثل تسمية الصراعات ومشاكل التنمية الأخرى.
أكبر ميزة Node هي تبنيها للتصميم I/O غير المتزامن والتصميم المعماري القائم على الأحداث. Node.js هو منصة تسمح JS بالركض خارج المتصفح. هدفها المبدئي هو تنفيذ خوادم الويب I/O غير المحظورة بالحدث
Node.js هي مجرد بيئة تشغيل JavaScript (أو مجموعة من المكتبات) ، والتي تكسب js القياسية مع وظائف IO غير المتزامنة ، أي قراءة الشبكات والملفات.
كمكتبة ، إنها ليست أكثر من واجهة برمجة تطبيقات لحن. بالإضافة إلى عمليات الاسترجاعات المناهضة للإنسان ، لا تختلف كثيرًا عن اللغات الخلفية الأخرى (PHP ، Python).
يستخدم Node.js وضع مؤشر ترابط واحد. كل موضوع يكمل وظيفة. يمكن أن تحتوي العملية على عدة مؤشرات ترابط. يتم استخدام جميع I/OS في طريقة طلب غير متزامن. بعد اكتمال كل طلب I/O غير متزامن ، سيتم دفعه إلى قائمة انتظار الحدث وانتظار معالجة عملية البرنامج.
باختصار ، فإن الفكرة الأساسية node هي: عدم الحظر ، والخيول المفردة والمدفوعة بالحدث. (يتوافق المتزامن مع الحظر ، غير المتزامن يتوافق مع عدم الحظر)
Node.JS مخطط العمارة
خيوط واحدة
بيئة تنفيذ لغة javascript هي "موضوع واحد".
يعني ما يسمى "موضوع واحد" أنه لا يمكن إكمال مهمة واحدة إلا في وقت واحد. إذا كانت هناك مهام متعددة ، فيجب عليك الانتظار ، وإكمال المهمة السابقة ، وتنفيذ المهمة التالية ، وما إلى ذلك.
ميزة هذا النموذج هي أنه من السهل نسبيًا التنفيذ وأن بيئة التنفيذ بسيطة نسبيًا ؛ العيب هو أنه طالما كانت هناك مهمة تستغرق وقتًا طويلاً ، يجب وضع المهام اللاحقة في قائمة الانتظار ، مما سيؤخر تنفيذ البرنامج بأكمله. المتصفحات الشائعة لا تستجيب (موت مزيف) في كثير من الأحيان لأن جزءًا معينًا من رمز Javascript يعمل لفترة طويلة (مثل حلقة ميتة) ، مما يتسبب في تعليق الصفحة بأكملها في هذا المكان ولا يمكن تنفيذ المهام الأخرى.
تقع اختناقات معظم تطبيقات الويب في I/O ، أي ، قراءة وكتابة الأقراص ، وقراءة وكتابة الشبكات ، وقراءة قواعد البيانات والكتابة. ما هي الاستراتيجية التي يجب استخدامها لانتظار هذه الفترة الزمنية التي أصبحت النقطة الأساسية لتحسين الأداء
متزامن وغير متزامن
لحل هذه المشكلة ، تقسم لغة Javascript طريقة التنفيذ للمهام إلى نوعين: متزامن (متزامن) وغير متزامن (غير متزامن).
"الوضع المتزامن" هو وضع القسم السابق. تنتظر المهمة الأخيرة أن تنتهي المهمة السابقة ثم تنفذها. ترتيب تنفيذ البرنامج متسق ومتزامن مع ترتيب الترتيب للمهام ؛ يختلف "الوضع غير المتزامن" تمامًا. كل مهمة لديها وظائف رد اتصال واحدة أو أكثر ( callback ). بعد انتهاء المهمة السابقة ، ليست المهمة التالية ، ولكن يتم تنفيذ وظيفة رد الاتصال. يتم تنفيذ المهمة الأخيرة دون انتظار انتهاء المهمة السابقة ، وبالتالي فإن ترتيب تنفيذ البرنامج غير متناسق وغير متزامن مع ترتيب الترتيب للمهام.
"وضع Async" مهم للغاية. على جانب المتصفح ، يجب تنفيذ العمليات طويلة الأجل بشكل غير متزامن لتجنب المتصفح من فقدان الاستجابة. أفضل مثال هو عمليات AJAX. على جانب الخادم ، فإن "الوضع غير المتزامن" هو الوضع الوحيد ، لأن بيئة التنفيذ متطورة ، إذا تم السماح بجميع طلبات http بشكل متزامن ، فسوف ينخفض أداء الخادم بشكل حاد وسوف يفقد رده قريبًا.
العمليات والمواضيع
العمليات والموضوعات في نظام Mac
من الشكل ، يمكننا أن نرى أن العملية يمكن أن تشمل مؤشرات ترابط متعددة. العمليات مثل ورش العمل في المشاريع. المواضيع هي العمال في ورشة العمل هذه. في نظام التشغيل الذي يقدم مؤشرات الترابط ، يستخدمون عادة العمليات كوحدة أساسية لتخصيص الموارد ، والموضوعات كوحدة أساسية للتشغيل المستقل والجدولة المستقلة. نظرًا لأن المواضيع أصغر من العمليات ولا تملك في الأساس موارد النظام ، فإن النفقات العامة للجدولة ستكون أصغر بكثير ، والتي يمكن أن تحسن بشكل أكثر كفاءة من التنفيذ المتزامن بين برامج متعددة في النظام.
الفرق
الفرق بين مؤشر الترابط والعملية هو أن عملية الطفل وعملية الأصل لها مساحات مختلفة من التعليمات البرمجية وبيانات ، في حين تشارك عدة مؤشرات ترابط مساحات البيانات ، كل مؤشر ترابط لديه مكدس تنفيذ خاص به وبرنامج عداد البرنامج لسياق التنفيذ الخاص به. يستخدم Multithreading بشكل أساسي لحفظ وقت وحدة المعالجة المركزية واستخدامه وفقًا للموقف المحدد. يجب استخدام موارد ذاكرة الكمبيوتر ووحدة المعالجة المركزية لاستخدامها أثناء تشغيل مؤشر ترابط.
الوحدات النمطية والوحدات النمطية
الوحدة النمطية: ملف ينفذ وظائف معينة لتنفيذ البرمجة المعيارية. إدخال الوحدات النمطية من خلال متطلبات (اسم الوحدة).
- يتم توفير وظائف في الوحدات النمطية (مثل المتغيرات والوظائف) إلى المتصل عن طريق تعيين خاصية لكائن exports .
كيفية استخدام الوحدات النمطية؟
إنه مناسب جدًا لاستخدام الوحدات النمطية في العقدة. في رمز JavaScript ، يمكنك استخدام الوظيفة العالمية بشكل مباشر require() لتحميل وحدة نمطية. على سبيل المثال ، يمكننا استخدام require("http") لتحميل وحدة خادم HTTP التي تأتي مع node .
شنطة
الحزمة: الحزمة عبارة عن مجلد يلف وحدات لإصدار وتحديث وإدارة التبعية والتحكم في الإصدار. صف معلومات الحزمة من خلال package.json: ملفات الإدخال ، الحزم الخارجية التبعية ، إلخ. قم بتثبيت الحزمة من خلال أمر npm install واستخدم الحزمة من خلال require .
I/O غير المتزامن ودفع الحدث
Node.js 'آلية غير متزامنة تعتمد على الأحداث. كل I/O هو طلب. يتم طلب جميع قرص I/O ، واتصالات الشبكة ، واستعلامات قاعدة البيانات بطريقة غير محظورة. تتم معالجة النتائج التي تم إرجاعها بواسطة حلقة الحدث. كما هو مبين في الشكل أدناه:
ستقوم عملية Node.js بمعالجة حدث واحد فقط في نفس الوقت ، وتدخل على الفور حلقة الحدث للتحقق من الأحداث اللاحقة ومعالجتها بعد الانتهاء. ميزة ذلك هي أن وحدة المعالجة المركزية والذاكرة موجودة في نفس الوقت لمركزية شيء واحد مع السماح بتنفيذ عمليات الإدخال/الإخراج المستهلكة للوقت بالتوازي قدر الإمكان
ابدأ برمجة العقدة
هنا ، أوصي باستخدام webstorm لتطوير node.js ، وهو مريح وسريع ، وهو أسهل بكثير في الاستخدام من CMD أو المحطات تحت MAC.
بالنسبة لتثبيت العقدة ، يرجى Baidu بمفردك. لن أخوض في التفاصيل هنا. دعونا نلقي نظرة على واجهة برمجة العقدة تحت webstorm :
نحتاج فقط إلى النقر بزر الماوس الأيمن على واجهة رمز العقدة المكتوبة والنقر فوق "تشغيل" ، وهو مريح وسريع
فيما يلي واجهة إخراج العقدة:
في نظام Mac ، أوصي بالأدوات الثلاث التي أستخدمها: CODA2 و WebStorm و Sublime Text3. هذه هي أفضل أدوات التطوير التي لدي حتى الآن. قد تجرب أيضًا أي واحد يتماشى مع ذوقك.
لتطوير العقدة في webstorm ، تحتاج إلى تكوين ملفات معينة أولاً. يجب على الجميع استخدام بايدو للقيام بذلك. نظرًا لتكوين webstorm الخاصة بي ، لا يمكنني التقاط لقطة شاشة لتظهر لك الخطوات. الخطوات العامة هي: ضمن نظام MAC ، انقر فوق webstorm في الشريط العلوي ، ثم انقر فوق perference ، ثم انقر فوق Node.js and NPM ، ثم انقر فوق تكوين على الجانب الأيمن ، وأخيراً سيبدو كما يلي:
تشبه خطوات العملية تحت نظام windows تقريبًا هذه العملية. الإصدار الذي أستخدمه هو 8.0.4.
المتغيرات العالمية
في برمجة JS ، من الأفضل إضافة الكلمة الرئيسية VAR إلى كل متغير لتجنب تلويث مساحة الاسم العالمية وزيادة خطر اقتران التعليمات البرمجية.
وحدة التحكم
يتم استخدام console لإخراج الأحرف إلى standout القياسي لتيار الإخراج (STDOUT) ودفق الخطأ القياسي (STDERR).
console.log() يطبع الأحرف إلى دفق الإخراج القياسي وينتهي بخط جديد ، والذي يقبل معلمات متعددة وسيتم الإخراج بتنسيق printf() يشبه c
console.log(__dirname)输出文件目录حساب وقت تشغيل الرمز
console.time(label) console.timeEnd(label)نحتاج فقط إلى إعطاء نفس العلامة في البداية والنهاية ، ووضع أي رمز تريد حساب وقت التنفيذ في الوسط.
__filename و __dirname
console.log(__filename);// /Users/hwax/Desktop/My Project/avalon/hello.js console.log(__dirname);// /Users/hwax/Desktop/My Project/avalon