يجب أن تكون Node.js واحدة من أهم التقنيات اليوم. تقدم هذه المقالة بشكل أساسي خصائص وسيناريوهات التطبيق لـ Node.js.
Node.js عبارة عن منصة مبنية على وقت تشغيل Chrome JavaScript ، والذي يستخدم بسهولة لإنشاء تطبيقات الشبكة السريعة وسهلة التقييم. Node.js مصنوعة خفيفة الوزن وفعالة مع الحدث ، وهي مثالية للتطبيقات في الوقت الحقيقي كثيفة البيانات التي تعمل على الأجهزة الموزعة.
1. الميزات
1.1 I/O غير متزامن
إن ما يسمى I/O غير المتزامن بالنسبة إلى I/O المتزامن. يجب تنفيذ العديد من عمليات الإدخال/الإخراج أثناء تنفيذ البرنامج ، مثل قراءة الملفات والكتابة ، والمدخلات والإخراج ، والاستجابة للطلب ، وما إلى ذلك بشكل عام ، فإن عمليات الإدخال/الإخراج تستغرق وقتًا طويلاً. على سبيل المثال ، في وضع البرمجة التقليدية ، تحتاج إلى قراءة ملف لعدة G ، وسيتم إيقاف مؤشر الترابط بأكمله وانتظار قراءة الملف والاستمرار في التنفيذ. بمعنى آخر ، تمنع عمليات الإدخال/الإخراج تنفيذ الكود ، مما يقلل بشكل كبير من كفاءة البرنامج.
فيما يتعلق بـ I/O غير المتزامن ، ليس من المألوف في الواقع المهندسين الأماميين ، لأن بدء طلب AJAX هو المكالمة الأكثر شيوعًا "غير المتزامنة". في العقدة ، أخذ قراءة ملف (قراءة ملف هو عملية إدخال/إخراج تستغرق وقتًا طويلاً) كمثال ، فهي تشبه إلى حد كبير طريقة بدء طلب Ajax:
نسخة الكود كما يلي:
var fs = require ('fs') ؛
fs.readfile ('/path' ، function (err ، file) {
console.log ('قراءة ملف الانتهاء') ؛
}) ؛
console.log ('ابدأ في قراءة ملف') ؛
بعد أن تسمى الكود أعلاه FS.ReadFile ، يتم تنفيذ الكود اللاحق على الفور ، والوقت الذي "يتم فيه اكتمال ملف" لا يمكن التنبؤ به. عندما يواجه مؤشر ترابط عملية I/O ، لن ينتظر أن تنتهي عملية I/O بطريقة حظر ، ولكنها سترسل ببساطة طلب I/O إلى نظام التشغيل ومواصلة تنفيذ البيانات اللاحقة. عندما يكمل نظام التشغيل عملية I/O ، يتم إخطار الخيط الذي يؤدي عملية الإدخال/الإخراج في شكل حدث ، وسيقوم مؤشر الترابط بمعالجة الحدث في وقت محدد.
1.2 حلقة الحدث ووظيفة رد الاتصال
تعني حلقة الحدث المزعومة أن العقدة ستستخدم آلية الحدث لحل جميع العمليات غير المتزامنة ، ويحلق الخيط باستمرار للكشف عن قائمة انتظار الحدث. تتحقق حلقة الحدث للأحداث غير المعروفة في قائمة انتظار الحدث حتى نهاية البرنامج. تتمتع طريقة البرمجة بالأحداث بمزايا الاقتران الخفيف والخفيف والتركيز فقط على نقاط المعاملات. ومع ذلك ، في سيناريو المهام غير المتزامنة المتعددة ، تكون الأحداث مستقلة عن بعضها البعض ، وكيفية التعاون مشكلة. في JavaScript ، تكون وظائف رد الاتصال في كل مكان ، ووظائف رد الاتصال هي أفضل طريقة لقبول المكالمات غير المتزامنة لإرجاع البيانات.
1.3 خيوط واحدة
تحافظ العقدة على خصائص JS كخيط واحد في المتصفح. أكبر ميزة لخيط واحد هي أنه لا يتطلب مشكلة التزامن الواعي للدولة مثل البرمجة متعددة الخيوط ، ولا يوجد مسدود ، ولا تكاليف تبديل سياق الخيط. الخيط الفردي له أيضًا نقاط ضعفه ، ويتجلى بشكل رئيسي في ثلاثة جوانب: عدم القدرة على استخدام وحدة المعالجة المركزية متعددة النواة ؛ سوف تتسبب الأخطاء في الخروج من التطبيق بالكامل ، ومتانة التطبيق تستحق امتحان القبول العليا ؛ سوف تشغل كمية كبيرة من الحوسبة وحدة المعالجة المركزية وتجعل من المستحيل الاستمرار في استدعاء I/O غير المتزامن.
لحل المشكلة أعلاه ، تتبنى العقدة نفس الفكرة مثل HTML5 Web Corner وتستخدم معالجة Child_process لحل مشكلة الحساب الكبير في موضوع واحد. من خلال توزيع الحسابات على كل عملية طفل ، يمكن تقسيم عدد كبير من الحسابات ويمكن تمرير النتائج من خلال رسائل الأحداث بين العمليات.
1.4 المنصات المتقاطعة
العقدة عبارة عن منصة ، أي أن نفس مجموعة رمز JS يمكن نشرها وتشغيلها على Windows و Linux و OSX وغيرها من الأنظمة الأساسية. ويرجع ذلك بشكل أساسي إلى حقيقة أن العقدة قد بنيت بنية على مستوى النظام الأساسي بين نظام التشغيل ونظام الوحدة النمطية للعقدة العلوية.
2. سيناريوهات التطبيق
1) التطبيقات في الوقت الفعلي: مثل الدردشة عبر الإنترنت ، ودفع الإخطار في الوقت الفعلي ، وما إلى ذلك (مثل Socket.io)
2) التطبيق الموزع: استخدم البيانات الموجودة من خلال إدخال/إخراج متوازي فعالة
3) تطبيق الأداة: أدوات ضخمة ، من نشر الضغط الأمامي (مثل Grunt) إلى تطبيقات الواجهة الرسومية لسطح المكتب
4) تطبيقات اللعبة: يحتوي حقل اللعبة على متطلبات عالية في الوقت الفعلي والتزامن (مثل إطار Pomelo’s Netease)
5) استخدم واجهة مستقرة لتحسين إمكانيات تقديم الويب
6) بيئة لغة البرمجة الموحدة في الواجهة الأمامية: يمكن للمطورين في الواجهة الأمامية الدخول بسرعة إلى تطوير جانب الخادم (مثل الهندسة المعمارية الشهيرة في JavaScript الكاملة)