"التاريخ ليس الماضي ، يتم تنظيم التاريخ. مع التطور السريع لـ W3C والمتصفحات ، سيصبح التطور المعياري في الواجهة الأمامية بنية تحتية تدريجياً. كل شيء سيصبح في نهاية المطاف التاريخ ، وسيكون المستقبل أفضل." - أنا شخصياً أتفق مع الفقرة الأخيرة من نص يو بو الأصلي. نظرًا لأننا نتحدث عن "المستقبل" ، أعتقد شخصياً أنه إذا استمرت وحدة JS في الواجهة الأمامية ، فمن المحتمل أن يصبح تنسيق الوحدة النمطية مواصفات قياسية للويب المستقبلي وإنتاج طرق تنفيذ متعددة. تمامًا مثل تنسيق JSON ، يصبح في النهاية قياسيًا ويتم تنفيذه أصليًا بواسطة المتصفح.
من لديه أفضل معيار للوحدات غير المتزامنة ليصبح المستقبل؟ يتبع Seajs مواصفات CMD ، ويتابع requistjs مواصفات AMD ، لنبدأ بهذين التنسيقين المختلفين.
CMD
طريقة إعلان تبعية وحدة CMD:
نسخة الكود كما يلي:
تعريف (وظيفة (متطلب) {
var a = require ('./ a') ؛
var b = require ('./ b') ؛
// المزيد من الكود ..
})
يتم الإعلان عن تبعيات CMD في مكان قريب ويتم إعلانها من خلال طرق تتطلب الداخلية. ومع ذلك ، نظرًا لأنها وحدة غير متزامنة ، يحتاج المحمل إلى تحميل هذه الوحدات مقدمًا ، لذلك قبل استخدام الوحدة النمطية بالفعل ، يجب استخراج جميع التبعيات في الوحدة النمطية. سواء أكان ذلك استخراج اللودر أو الاستمتاع مسبقًا من خلال الأدوات الآلية ، لا يمكن تطبيق تنسيق إعلان التبعية هذا إلا من خلال التحليل الثابت ، وهو عيب CMD.
عيوب مواصفات CMD
لا يمكن الضغط مباشرة: الطلب هو متغير محلي ، مما يعني أنه لا يمكن ضغطه مباشرة من خلال أداة الضغط. إذا تم استبدال المتغير المتطلبات ، فلن تتمكن أدوات المحمل والأتمتة من الحصول على تبعيات الوحدة النمطية.
تحتوي الوحدة على اتفاقية إضافية: لا يمكن أن تكون معلمات المسار عمليات سلسلة ، ولا يمكن استخدام المتغيرات بدلاً من ذلك ، وإلا فإن أدوات المحمل والأتمتة لا يمكنها استخراج المسار بشكل صحيح.
تعني الاتفاقيات خارج المواصفات المزيد من الوثائق ما لم تكن أيضًا جزءًا من المواصفات.
ملاحظة: تطبيق التحليل الثابت SEAJS هو استخدام جزء متطلبات الاستخراج العادية للحصول على مسار وحدة التبعية.
AMD
طريقة إعلان تبعية وحدة AMD:
نسخة الكود كما يلي:
DEFINE (['./ a' ، './b'] ، function (a ، b) {
// المزيد من الكود ..
})
يتم الإعلان عن تبعيات AMD مقدمًا. ميزة هذه الميزة هي أن الاعتماد لا يتطلب تحليلًا ثابتًا. يمكن لكل من المحمل وأداة الأتمتة الحصول على تبعيات مباشرة. يمكن أن يكون تعريف المواصفات أكثر بساطة ، مما يعني أنه قد يتم إنشاء تطبيقات أكثر قوة ، وهو أمر مفيد لكل من أداة تحليل المحمل والأتمتة.
عيوب مواصفات AMD
الإعلانات المسبقة التبعية ليست ودية للغاية في كتابة الكود.
هناك فرق معين بين الوحدة الداخلية ووحدات NodeJs.
يجب شرح المشكلة الثانية بالتفصيل. في الواقع ، لا يمكن أن تكون الوحدات غير المتزامنة لـ CMD ولا AMD متسقة مع مواصفات وحدة التزامن (وحدات NodeJS) ، فقط مثل وحدة التزامن أكثر من من هو. لتحويل AMD إلى وحدة التزامن ، بالإضافة إلى إزالة الحزمة من وظيفة DEFINE ، تحتاج إلى استخدام الطلب في الرأس لإعلان التبعية ، في حين أن CMD يحتاج فقط إلى إزالة حزمة وظيفة DEFINE.
لخص
من حيث المواصفات ، AMD أبسط وصارم ، وله قابلية تطبيق أوسع. من خلال الترويج القوي لـ requistjs ، أصبحت تقريبًا معيارًا للوحدة النمطية غير المتزامنة في الخارج ، وقد دعمت المكتبات الرئيسية مواصفات AMD على التوالي.
ولكن من Seajs و CMD ، قمنا أيضًا بالكثير من الأشياء الجيدة:
1. نمط بيان التبعية الطبيعي نسبيا
2. إدراك داخلي صغير وجميل
3. تصميم الوظيفة المحيطية الدقيقة
4. دعم مجتمع صيني أفضل
إذا كان ذلك ممكنًا ، آمل أن أرى Seajs يدعم أيضًا AMD ، والسعادة النهائية للمطورين هي غالبية المطورين.