دعنا أولاً نلقي نظرة على المقدمة على الموقع الرسمي لـ NodeJS:
خصائصها هي:
1. إنها بيئة تشغيل JavaScript
2. الاعتماد على محرك Chrome V8 لشرح رمز
3. يحركه الحدث
4
5. خفيفة الوزن ، قابلة للتطوير ، مناسبة لتطبيقات التفاعل بين البيانات في الوقت الحقيقي
6. عملية واحدة ، موضوع واحد
(1) ، لماذا تختار Nodejs JavaScript كلغة الناقل
في الواقع ، في بداية تنفيذ Node.js ، لم يختار المؤلف ريان دال جافا سكريبت. لقد جرب C و Lua ، لأنه يفتقر إلى بعض ميزات اللغة عالية المستوى ، مثل الإغلاق والبرمجة الوظيفية ، مما جعل البرنامج معقدًا ويصعب الحفاظ عليه.
JavaScript هي لغة تدعم نموذج البرمجة الوظيفية ، والتي تتناسب بشكل جيد مع نموذج البرمجة القائم على الأحداث Node.js. بالإضافة إلى ذلك ، قام محرك V8 الذي توفره Google بتحسين سرعة تنفيذ لغة JavaScript.
ما يتم تقديمه إلينا أخيرًا هو Node.js ، وليس Node.c أو Node.lua أو تطبيقات اللغة الأخرى.
(2) Node.js ليس تطبيق JS ، ولكن منصة تشغيل JS
عندما ترى اسم node.js ، قد يعتقد المبتدئون عن طريق الخطأ أن هذا تطبيق JavaScript. في الواقع ، تمت كتابة Node.js في C ++ وهي بيئة تشغيل JavaScript.
يستخدم Node.js محرك V8 من Google Chrome ، والذي يتمتع بأداء جيد ويوفر أيضًا العديد من واجهات برمجة التطبيقات على مستوى النظام ، مثل تشغيل الملفات ، وبرمجة الشبكة ، إلخ.
فيما يلي جميع الوحدات النمطية المشاركة في Nodejs:
سيخضع رمز JavaScript على جانب المتصفح لقيود الأمان المختلفة عند التشغيل ، وتكون تشغيل نظام العملاء محدودًا.
في المقابل ، يعد Node.js وقت تشغيل شامل للخلفية ، حيث يوفر JavaScript مع العديد من الوظائف التي يمكن أن تحققها اللغات الأخرى.
(3) ، ميزات node.js
Node.js هي أيضا مبتكرة نسبيا في التصميم. يتم تشغيله في وضع واحد من العمليات والموضوع المفرد (وهذا يتماشى مع الطريقة التي يعمل بها JavaScript) ،
يتم تنفيذ آلية الحدث التي تعتمد على الحدث بواسطة Node.js من خلال صيانة فعالة داخلية لعلاج قوائم قوائم حلقة الأحداث. لا يوجد احتلال الموارد وتبديل السياق من القوائم المتعددة. هذا يعني أنه في مواجهة طلبات HTTP على نطاق واسع ، يتعامل Node.js مع كل شيء مع الحدث.
قد يكون مطورو خدمة الويب الذين يستخدمون اللغات التقليدية على دراية بالتزامن وتعاون متعدد الخيوط ، ولكن في مواجهة Node.js ، نحتاج إلى قبول وتفهم خصائصه.
اثنان ، مفاهيم مهمة
1. ما هي حلقة الحدث؟ (مفهوم مهم للغاية)
حلقة الحدث هي مفهوم مهم للغاية ، في إشارة إلى آلية تشغيل نظام الكمبيوتر.
إذا كنت ترغب في فهم حلقة الحدث ، فيجب أن تبدأ بوضع تشغيل البرنامج. البرنامج بعد الجري يسمى العملية. بشكل عام ، يمكن للعملية القيام بمهمة واحدة فقط في وقت واحد.
إذا كان هناك العديد من المهام التي سيتم تنفيذها ، فهناك ثلاثة حلول فقط.
(1) ، خط. نظرًا لأن العملية يمكنها تنفيذ مهمة واحدة فقط في وقت واحد ، يجب أن تنتظر حتى يتم الانتهاء من المهمة السابقة قبل تنفيذ المهمة اللاحقة.
(2) ، إنشاء عملية جديدة. استخدم الأمر Fork لإنشاء عملية جديدة لكل مهمة.
(3) ، إنشاء موضوع جديد. نظرًا لأن العمليات تستهلك الكثير من الموارد ، فإن برامج اليوم غالبًا ما تسمح للعملية باحتواء مؤشرات ترابط متعددة ، وتتكمل مؤشرات الترابط المهمة.
خذ لغة JavaScript كمثال. إنها لغة واحدة. يتم الانتهاء من جميع المهام في موضوع واحد ، أي الطريقة الأولى أعلاه تم اعتمادها. بمجرد مواجهة عدد كبير من المهام أو مهمة تستغرق وقتًا طويلاً ، ستشهد صفحة الويب "موتًا مزيفًا" لأن JavaScript لا يمكن أن تتوقف ولا يمكنها الاستجابة لسلوك المستخدم.
قد تسأل ، لماذا JavaScript واحد الخيوط؟ لا يمكن تنفيذه على أنه متعدد الخيوط؟
هذا له علاقة بالتاريخ:
ميزة رئيسية للغة JavaScript هي خيط واحد ، مما يعني أنه لا يمكنك فعل شيء واحد إلا في نفس الوقت. فلماذا لا تستطيع JavaScript أن يكون لها عدة مؤشرات ترابط؟ هذا سوف يحسن الكفاءة.
يرتبط خيوط JavaScript الفردية بغرضها. كلغة البرمجة النصية للمتصفح ، الغرض الرئيسي من JavaScript هو التفاعل مع المستخدمين وتشغيل DOM. هذا يحدد أنه لا يمكن أن يكون سوى خيوط واحدة ، وإلا فإنه سيؤدي إلى مشاكل تزامن معقدة للغاية.
على سبيل المثال ، لنفترض أن JavaScript لديها مؤشر ترابط في نفس الوقت ، ويضيف مؤشر ترابط واحد محتوى على عقدة DOM معينة ، ويحذف مؤشر الترابط الآخر هذه العقدة ، أي مؤشر ترابط يجب أن يأخذه المستعرض في هذا الوقت؟
لذلك ، من أجل تجنب التعقيد ، يعد JavaScript موضوعًا واحدًا من ولادته ، والذي أصبح الميزة الأساسية لهذه اللغة ولن يتغير في المستقبل.
من أجل الاستفادة من قوة الحوسبة في وحدات المعالجة المركزية متعددة النواة ، اقترح HTML5 معيار عامل الويب ، مما يسمح برامج نصوص JavaScript لإنشاء مؤشرات ترابط متعددة ، ولكن يتم التحكم في مؤشرات الترابط الطفل بالكامل بواسطة مؤشر الترابط الرئيسي ولا يمكن تشغيل DOM.
لذلك ، لا يغير هذا المعيار الجديد طبيعة الخيوط الفردية JavaScript.
العودة إلى EventLoop:
يعني الخيوط الفردية أن جميع المهام تحتاج إلى قائمة الانتظار ، وسيتم تنفيذ المهمة السابقة قبل تنفيذ المهمة التالية. إذا استغرقت المهمة السابقة وقتًا طويلاً ، فيجب أن تنتظر المهمة التالية.
إذا كانت قائمة الانتظار بسبب الكمية الكبيرة من الحوسبة وكانت وحدة المعالجة المركزية مشغولة للغاية ، فسيكون ذلك جيدًا ، ولكن في كثير من الأحيان تكون وحدة المعالجة المركزية في وضع الخمول لأن جهاز IO (جهاز الإدخال والإخراج) بطيء للغاية (مثل عملية Ajax يقرأ البيانات من الشبكة) ، وعليك الانتظار حتى يتم التوصل إلى النتيجة قبل تنفيذها.
أدرك مصمم لغة JavaScript أنه في هذا الوقت يمكن للمعلومات الرئيسية أن يتجاهل جهاز IO تمامًا ، وتعليق مهام الانتظار ، وتشغيل المهام التالية أولاً. انتظر حتى يقوم جهاز IO بإرجاع النتيجة ، ثم يستدير ومتابعة المهمة المعلقة.
لذلك ، يمكن تقسيم جميع المهام إلى نوعين ، واحدة هي مهمة متزامنة والآخر مهمة غير متزامنة. تشير المهام المتزامنة إلى مهام قائمة الانتظار في الخيط الرئيسي ، تم تنفيذ المهمة السابقة فقط.
يمكن تنفيذ المهمة الأخيرة ؛ تشير المهمة غير المتزامنة إلى مهمة لا تدخل الخيط الرئيسي ولكنها تدخل "قائمة انتظار المهمة". فقط عندما تقوم "قائمة انتظار المهمة" بإخطار الخيط الرئيسي الذي يمكن تنفيذ المهمة غير المتزامنة ، فهل ستدخل المهمة المهمة الرئيسية للتنفيذ.
كما هو مبين في الشكل أدناه:
طالما أن الخيط الرئيسي فارغ ، فسوف يقرأ "قائمة انتظار المهمة". هذه هي الآلية الجارية لجافا سكريبت. سيتم تكرار هذه العملية بشكل مستمر.
3. مثال التفسير
حسنًا ، دعنا لا نقول الكثير من "الهراء" ، دعنا نبدأ تطبيق NodeJS الأول: "Hello Big Bear" على الفور.
افتح المحرر المفضل لديك وقم بإنشاء ملف HelloWorld.js .
الرمز كما يلي:
نسخة الكود كما يلي: 1 var http = require ("http") ؛ 2 http.createserver (function (request ، response) {3 response.writehead (200 ، {4 "content-type": "text/plain" 5}) ؛ 6 reponse.write ("Hello ، Big Bear!)
دعنا ندير ونختبر هذا الرمز. أولاً ، قم بتنفيذ البرنامج النصي الخاص بك باستخدام node.js:
افتح أداة سطر الأوامر CMD ، قم بالتبديل إلى دليل العمل الخاص بك ، وقم بتشغيل الأمر "Node HelloWorld.js"
بعد ذلك ، افتح المتصفح وقم بزيارة http: // localhost: 8888/، وسترى صفحة ويب مع الكلمات "Hello ، Big Bear!".
القليل من المعرفة الممتدة:
كما هو موضح في الشكل أدناه ، هذا جزء من الكود المصدري لـ http.js في nodejs. CreateServer هي واجهة سهلة الاستخدام. يعتمد التنفيذ الداخلي نموذجًا سينمليتون. تتمثل ميزة ذلك في فصل مهام الإنشاء والتهيئة بشكل فعال ، والتركيز على المسؤوليات ، وتقليل الاقتران. هذه فكرة يمكن للجميع التعلم منها عند البرمجة.
هههههههه أليس كذلك مثيرًا للاهتمام؟ هذه مجرد تجربة قصيرة. سأشرح الكثير من نقاط المعرفة لاحقًا. يمكن للجميع فهم ببطء o (∩_∩) يا هاها ~
رابعا. نظرة عامة عامة
1. إنها بيئة تشغيل JavaScript
2. الاعتماد على محرك Chrome V8 لشرح رمز
3. يحركه الحدث
4
5. خفيفة الوزن ، قابلة للتطوير ، مناسبة لتطبيقات التفاعل بين البيانات في الوقت الحقيقي
6. عملية واحدة ، موضوع واحد
أخيرًا ، ما أريد قوله هو: لا توجد أمثلة كثيرة في هذه المقالة ، لكن هذه المفاهيم مهمة للغاية. يجب أن يكون لديك فهم واضح ، بحيث تضع أساسًا متينًا لتعلم NodeJS المستقبلي. تعال ، اعمل بجد معًا.
هاهاها ، هذا المقال قد انتهى ولن يستمر. آمل أن أتواصل معك أكثر وأن أحرز التقدم معًا. . . . . . Huhuhuhu ... (*^__^*)