مقدمة
إذا لم نتعلم nodejs ، فسنصبح قديمًا ... عندما نجحت موجة HTML5 ، بدأ العديد من أسلافهم رحلة NodeJS ، وفي ذلك الوقت كنت لا أزال أعمل على برامج من جانب الخادم.
في وقت لاحق ، تغيرت إلى الواجهة الأمامية ، وكانت المسافة بينها وبين المستوى كبيرًا جدًا بالفعل. لأنني كنت أعرف لغة جانب الخادم وعملت لفترة طويلة ، بدأت فقط في تعلم NodeJs والتحرك نحو الواجهة الأمامية الكاملة.
هذه المرة ، خطة تعلم Nodejs هي:
① تعلم المعرفة الأساسية في 1-2 أسابيع
② تطوير مشروع بسيط في حوالي أسبوع واحد
③ استخدم nodejs لتطوير مجموعة من الأدوات لتصحيح الأخطاء المحمولة
④ التعبئة المتعلقة بالتغليف (قد يكون هذا بعيدًا)
ميزات NodeJS
① غير متزامن
يتم إكمال جميع Nodejs بشكل غير متزامن من قراءة الملفات إلى طلبات الشبكة ، وتلعب وظائف رد الاتصال دورًا مهمًا. العقدة هي نموذج البرنامج الرائد
② رد الاتصال الحدث
تجعل عمليات عروض أحداث البرنامج خفيفة الوزن ، لكن الخصوصية تعتمد على المبرمج. ومع ذلك ، فإن وظيفة رد الاتصال من الصعب في الواقع قراءتها.
③ خيوط واحدة
العقدة هي واحدة. إذا كان متعدد الخيوط ، فستكون هذه اللغة أعمق. إنه لأمر مزعج للغاية طرح بعض الأسئلة حول التواصل في هذه العملية ، لكن الخيط لا يحتوي على مسدود أو مشاكل أخرى.
ولكن هناك مشاكل في ارتباط الأداء ، لأنه لا يمكن استخدام متعدد النواة ؛
آلية الوحدة النمطية/commonjs
اعتدنا على القيام بتطوير من جانب الخادم. إذا لم يكن لدينا رمز تنظيمي جيد ، فسيكون من الصعب للغاية الحفاظ عليها لاحقًا ، فما هي المعمارية MVC و Three Bayer؟
الآن يقترب منطق العمل في الواجهة الأمامية تدريجياً من الواجهة الخلفية. أما بالنسبة للتطبيقات ذات الصفحات الواحدة ، فقد تجاوز منطق برنامج الواجهة الخلفية.
ستؤدي الزيادة المستمرة في طرق عرض الصفحة إلى زيادة في كمية JS. أصبحت كيفية إدارة رمز الواجهة الأمامية لدينا مشكلة ، لذلك يظهر متطلبات ...
ملاحظة: لعنة هذه الفترة لها علاقة عشرة سنتات مع Nodejs ...
لا يحتوي JavaScript على نظام معياري ، لذلك اقترح شائعات لإعطاء JS الأساس لتطوير تطبيقات واسعة النطاق.
مرجع الوحدة النمطية
إذا أردنا الرجوع إلى وحدة نمطية ، مثل الحساب الرياضي المتعلق:
var math = require ('Math') ؛
تعريف الوحدة النمطية
إذا أردنا تحديد الوحدة الخاصة بنا ، فيمكننا القيام بذلك
نسخة الكود كما يلي:
orports.add = function () {
إرجاع مجموع
}
إذا تم تعريف هذه الوظيفة في الرياضيات ، فيمكن استخدامها
Math.add () ؛
معرف الوحدة النمطية
معرف الوحدة هو المعلمة التي تم تمريرها. يجب تسميته للجمال ويشير إلى مسار الملف. إنه مشابه جدًا لـ requirejs هنا.
تنفيذ الوحدة النمطية
ينقسم تنفيذ وحدة العقدة إلى فئتين: إحداها هي الوحدة الأساسية على مستوى النظام والآخر هو وحدة الملفات التي كتبها المستخدمون.
تتم ترجمة الوحدة الأساسية إلى ملف ثنائي أثناء عملية التجميع. بعد بدء عملية العقدة ، سيتم تحميل بعض الوحدات الأساسية مباشرة في الذاكرة (موقع الملف والتجميع والتنفيذ)
يجب تحميل وحدة الملف ديناميكيًا ، والسرعة بطيئة نسبيًا.
ومع ذلك ، بمجرد تحميلها ، سيتم تخزين هذه الملفات ، وسيتم قراءة الملفات المخزنة (الملفات المترجمة) عند استيرادها مرة أخرى (الملفات المترجمة)
لنتحدث قليلاً هنا. عندما نستخدم السطح السفلي ، سنقوم بتجميع HTML لتشكيل وظيفة قالب (إنها في الحقيقة مجرد وظيفة). في الواقع ، هذا يمكن أن يكون مخبأة.
احفظ الوظائف المترجمة قبل نشر المشروع وإزالة ملف قالب HTML (لا أعرف تأثير التحسين)
في العقدة ، كل وحدة هي كائن:
نسخة الكود كما يلي:
وحدة الوظائف (المعرف ، الأصل) {
this.id = id ؛
this.exports = {} ؛
// الوالدين كلمة رئيسية ، يجب ألا تستخدم بشكل عشوائي
this.parent = الوالدين ؛
if (parent && parent.children) {
parent.children.push (هذا) ؛
}
this.filename = null ؛
this.loaded = false ؛
this.children = [] ؛
}
المرحلة الأخيرة من إدخال وحدة الملفات أثناء التجميع والتنفيذ. بعد تحديد موقع الملف المحدد ، ستقوم العقدة بإنشاء كائن وحدة جديد ، ثم تحميل وتجميع وفقًا للمسار.
كل وحدة تم تجميعها بنجاح سوف تقوم بتخزين مسار الملف الخاص به كفهرس على الوحدة النمطية ._cache
يحتوي كل ملف وحدة نمطية على ثلاثة متغيرات: تتطلب ، صادرات ، ووحدة ، ولكن لم يتم تعريفها في الملف (متغيرات __filename__ و __dirname__ هي أيضًا).
في الواقع ، أثناء عملية التجميع ، تلتف العقدة محتوى رأس ملف JavaScript وذيل (أي ما يعادل تمرير وظيفة مخصصة إلى النافذة)
نسخة الكود كما يلي:
(الوظيفة (الصادرات ، المتطلبات ، الوحدة النمطية ، __filename__ ، __dirname__) {
var math = require ('Math') ؛
orports.area = دالة (نصف قطر) {
يعود ''؛
} ؛
}) ؛
وبهذه الطريقة ، تكون الوحدة معزولة ولن تؤثر على بعضها البعض. إنه يشبه إلى حد ما تجميع الترابط السطحي ...
حزمة و NPM
تنظم العقدة وحداتها الأساسية الخاصة ، لذلك يمكن كتابة وحدات ملفات الطرف الثالث واستخدامها بطريقة منظمة ، ولكن في الوحدات النمطية الطرف الثالث ، لا تزال الوحدات النمطية في أماكن مختلفة.
لا يمكن الرجوع إليها مباشرة بين بعضها البعض. في الوحدة النمطية الاستعانة بمصادر خارجية و NPM هي آلية لإنشاء اتصالات.
ملاحظة: سوف تشكل العديد من الوحدات حزمة. مفهوم هذه الحزمة يشبه مفهوم حزمة Java.
بعد إلغاء ضغط بنية الحزمة ، سيتم تشكيل عدة ملفات:
① package.json ملف الوصف
② BIN الدليل الثنائي القابل للتنفيذ
③ دليل رمز JavaScript
④ وثائق DOC (الإبهار بشكل أساسي غير موجود)
⑤ اختبار العرض التوضيحي
ما سبق هو بعض مواصفات حزمة CommonJS ، ولكن يمكننا أن نتعلم القليل (المبتدئين) ، ويجب أن يكون NPM بارعًا فيه. بمساعدة NPM ، يمكننا أن نكون بارعين في تثبيت حزم الإدارة.
تثبيت حزمة التبعية
يعد تثبيت حزم التبعية طريقة شائعة:
NPM تثبيت Express
بعد التنفيذ ، سيتم إنشاء دليل Node_Modules في الدليل الحالي ، ثم سيتم إنشاء دليل Express أدناه ...
ملاحظة: Express هو إطار عمل شهير لتطوير الويب على NodeJS ، مما يساعدنا بسرعة على تطوير تطبيق ويب
بعد الانتهاء من التثبيت ، يمكن تسمية:
نسخة الكود كما يلي:
var express = require ('Express') ؛
خاتمة
انتهى هذا القسم ببساطة ، وستتعمق العملية القتالية الفعلية لمشروعنا تدريجياً.