لقد رأيت إضافات تقوم بتنزيل مكتبات تابعة لجهات خارجية وتحميلها كملفات محلية من /vendor، وأخرى تتطلب المكتبة عبر CDN.
هل هناك نهج أفضل من الآخر من حيث النطاق الترددي/السرعة؟
لقد رأيت إضافات تقوم بتنزيل مكتبات تابعة لجهات خارجية وتحميلها كملفات محلية من /vendor، وأخرى تتطلب المكتبة عبر CDN.
هل هناك نهج أفضل من الآخر من حيث النطاق الترددي/السرعة؟
هناك منطقة رمادية صغيرة بينهما. يمكنك إعداد Discourse لخدمة الأصول، بما في ذلك ملفات JS الخاصة بالمواضيع/الإضافات، عبر شبكة توصيل محتوى (CDN). لذا، حتى لو قام الإضافة بتحميل المكتبة الخارجية في /vendor، فسيتم تحميلها من شبكة CDN التي قمت بإعداد Discourse لاستخدامها. ومع ذلك، فإن هذه شبكة CDN خاصة.
ومع ذلك، لا أعتقد أن هذا هو ما تقصده. أنت تقصد خدمات مثل https://cdnjs.com و https://www.jsdelivr.com، وهذا موضوع مختلف قليلاً - شبكة CDN عامة.
تتمتع خدمات مثل cdnjs بشبكة واسعة من الخوادم المخصصة لهذا النوع من الأمور.
لذا،
يمكن أن تكون أسرع، وتساعد بالفعل في تقليل الحمل على خادمك.
لكن… هذه الفائدة في السرعة متاحة أيضًا إذا استخدمت /vendor في موقع قام بإعداد Discourse لاستخدام شبكة CDN خاصة.
أيضًا، فيما يتعلق بالنطاق الترددي، فإن معظم مكتبات JS الخارجية أصغر من 20 كيلوبايت. لذا، بينما تحصل على بعض التوفير… فهذا ليس نقطة رئيسية حقًا ما لم يحصل موقعك على مئات الآلاف من المشاهدات يوميًا.
إحدى فوائد استخدام شيء مثل cdnjs هي أنهم يخدمون نفس الملف ويحتويون على رؤوس تخزين مؤقت.
ماذا يعني ذلك؟ حسنًا، لنستخدم jQuery كمثال.
تستخدم العديد من المواقع jQuery، وكثير منها يستخدم cdnjs لتقديم jQuery. عندما يقدم cdnjs ملف jQuery للمستخدم، فإنه يتضمن رؤوس تخزين مؤقت - الافتراضي هو سنة واحدة.
هذا يعني أنه إذا زار المستخدم الموقع أ - الذي يستخدم cdnjs لـ jQuery - ثم زار الموقع ب، والذي يستخدم أيضًا نفس الملف بنفس الإصدار، فلن يحتاج متصفحه إلى تنزيل jQuery مرة أخرى، لأنه مخزن مؤقتًا - مما يؤدي إلى تحميل أسرع للصفحة.
النقطة المذكورة أعلاه هي أكبر ميزة لاستخدام شيء مثل cdnjs لمكتباتك الخارجية.
ومع ذلك، فإن عددًا قليلًا جدًا من المكتبات شائع مثل jQuery، لذا يعتمد الأمر حقًا على مدى شيوع المكتبة.
عند تحميل الملفات من cdnjs، ستحتاج أيضًا إلى التأكد من إضافتها إلى إعدادات سياسة أمان المحتوى (CSP).
لذا، أعتقد أن الإجابة هنا هي… الأمر يعتمد.
هل تقوم بتحميل المكتبة كما هي؟
هل هي شائعة؟
هل هي كبيرة الحجم؟
إذا كان الأمر كذلك، ربما استخدم شبكة CDN. وإذا لم يكن كذلك، فاحتفظ بالأمر بسيطًا وأضفها ببساطة في /vendor
تحديث صغير هنا: لم يعد Chrome وSafari وFirefox يعملان بهذه الطريقة بعد الآن. لم يعد هناك ذاكرة تخزين مؤقت مشتركة بين المواقع:
هل يمكن لأحد مشاركة رابط لمكون إضافي يستخدم طريقة إضافة مكتبات الطرف الثالث إما عبر مجلد /vendor أو شبكة توصيل المحتوى (CDN)؟
لم أتمكن من العثور على أي وثائق حول هذا الموضوع، وأواجه صعوبة في تضمين مكتبة طرف ثالث في المكون الإضافي الخاص بي، وتسجيلها بشكل صحيح، والامتثال لهيكل المجلد المحدد، وكتابة عبارة الاستيراد بشكل صحيح في ملفات وحدة التحكم.
شكراً جزيلاً للمساعدة مقدماً!
قد يكون discourse-math مرجعًا جيدًا - فهو يحتوي على عدد من البرامج النصية “المُباعة” ضمن الدليل /public. أو يمكن أن يكون مثال أبسط هو discourse-client-performance.