سؤال

لا يمكنني العثور على الكثير من المعلومات حول AssetManager من YII لإدارة ملفات JS و CSS. سؤالي هنا هو ما هو الهدف من استخدام AssetManager؟ لست متأكدًا من القيمة التي تضيفها إلى عملية التطوير الخاصة بي ، في الواقع ، يبدو أنها تعقد الكود الخاص بي ... في كل مرة أقوم فيها بتغيير برامج النصوص أو رمز CSS ، يجب أن أدخل وحذف مجلد الأصول الخاص بي للتأكد لدي أحدث الإصدارات.

يبدو أنه من الأسهل بكثير وضع جميع ملفات JavaScript تحت/Webroot/JS/فقط استخدم العلامات لتحميل الملفات بدلاً من المرور بمشكلة AssetManager. بالإضافة إلى ذلك ، تضع وظيفة registerCoreScors من yii دائمًا علامات البرنامج النصي داخل علامة الرأس ، بدلاً من وضعها في الجزء السفلي من الكود ، بالقرب من علامة الجسم الختامية ، على النحو الموصى به من قبل YSLOW.

أعتقد أنه يجب أن يكون هناك فجوة في فهمي لأرباك يي. أي شخص لديه أي أفكار لماذا استخدام AssetManager أفضل من ترميز علامات البرنامج النصي داخل رمز PHP؟ أنا مرتبك بعض الشيء ...

شكرًا!

هل كانت مفيدة؟

المحلول

أنا متأكد من أن شخصًا ما يمكنه الإجابة على هذا أفضل مني ، ولكن في الأساس يكون لديك مصدر يمكن أن تظل ملفات JS و CSS في المجلد المحمي.

هذا أكثر أمانًا قليلاً لشيء واحد ، لكن الفائدة الرئيسية بالنسبة لي هي ذلك يمكنك ضغط الأصول الخاصة بك ومعالجتها ومعالجتها بطريقة أخرى مع نظام نشر الأصول ، ويسهل ذلك استضافة JS و CSS على CDN لأنه منفصل عن قاعدة الشفرة الخاصة بك.

أيضا ، إليك الرد الرسمي من تشيانغ (الرجل الذي كتب يي) عن هذا.

نصائح أخرى

الفائدة الرئيسية لمدير الأصول في YII هي ذلك يتيح لك تنظيم مكوناتك بطريقة قائمة بذاتها.

حكاية عنصر واجهة مستخدم

النظر في مكون هو عنصر واجهة المستخدم. لنفترض أن التوزيع يتضمن بعض الأصول جنبًا إلى جنب مع تنفيذ المكون ، على سبيل المثال هذه الملفات:

SuperWidget.php
superwidget.css
superwidget.js
image_for_css.png

فكر في كيفية دمج هذه القطعة في طلبك إذا لم يكن مدير الأصول موجودًا. قد تشمل الخطوات النموذجية:

  1. ينسخ SuperWidget.php في مكان ما داخل protected/ الدليل
  2. ينسخ superwidget.js لك js/ الدليل
  3. ينسخ superwidget.css لك css/ الدليل
  4. ينسخ image_for_css.png لك images/ دليل أو ربما في الداخل css/ للمساعدة في تقليل تبعيات المسار النسبي

ثم في وقت التشغيل ، فإن SuperWidget سوف تنبعث من العلامات المناسبة لتشمل CSS و JavaScript ؛ للقيام بذلك ، سوف تحتاج إلى معرفة أين وضعت هذه الأصول بالضبط. بعبارات أخرى: يمكن اتخاذ بعض الخيارات المتعلقة بالتثبيت بشكل تعسفي ، ولكن بعد ذلك يتم وضعها في الحجر ما لم تذهب وتحرير المصدر.

هل القطعة قابلة لإعادة الاستخدام؟

إذا تم تخصيص هذه القطعة للغاية وكان من المفترض أن تكون جزءًا لا ينفصل عن طلبك ، فسيعمل هذا النهج بشكل جيد ولن يكون هناك الكثير من المدير. ولكن ماذا لو كان مكونًا مفيدًا على نطاق واسع تريد توزيعه؟

تبدأ المشاكل.

بادئ ذي بدء ، يتطلب مخطط النشر الذي فحصناه من مستخدمي القطعة لنسخ الملفات المختلفة إلى أدلة مختلفة ، مما يعقد إجراء التثبيت وزيادة فرصة الخطأ.

لكن القضية الأكبر هي أن مخطط النشر الخاص بك يمكن أن يتعارض مع أي مكون آخر تم تطويره بشكل مستقل عنك. ماذا لو قرر شخص آخر الحصول على ملف superwidget.js ملف أيضا؟

إذا كانت تعليمات التثبيت الخاصة بهذين المكونين تتعارض ، فمن الواضح أنه لا يمكن تثبيت أحدهما على النحو المقصود ، ثم تلجأ إلى تغيير بعض التفاصيل واختراق الكود المصدري للمكون لاستيعاب هذه التغييرات. إذا قمت بالترقية لاحقًا إلى إصدار أحدث من هذا المكون ، فستضطر إلى حساب التخصيص الخاص بك بعناية ، مما يجعل ترقية "نسخة/الكتابة فوق" مستحيلة.

كل هذا ليس جميلًا حقًا ، وعلى الرغم من أنه من غير المحتمل أن يحدث في الممارسة العملية ، فمن المؤكد أنه لا يشعر بشكل صحيح.

مدير الأصول ، اجعله كذلك

إليك المكان الذي يأتي فيه مدير الأصول. لنفترض أنك تقرر هيكل مكونك مثل هذا:

superwidget/
  SuperWidget.php
  assets/
    css/
      superwidget.css
    js/
      superwidget.js
    images/
      image_for_css.png

يمكنك نسخ هذا مباشرة في مكان ما داخل الخاص بك protected/ الدليل بغض النظر عن المكونات الأخرى التي قمت بتثبيتها ؛ أسوأ شيء يمكن أن يحدث هنا هو أنه يجب عليك إعادة تسمية superwidget/ لشيء آخر إذا كان هناك صراع.

باستخدام مدير الأصول ، SuperWidget.php نشر بالكامل superwidget/assets/ الدليل ، مع النسخة تنتهي على سبيل المثال assets/1337c0de/ أين assets/ هل مسار الأصول الأساسية للتطبيق و 1337c0de/ هو تجزئة عشوائية تم إنشاؤها بواسطة YII وضمان عدم التعارض مع أي أصل آخر منشور.

هذا يعني أن أصول العرض الفائق لا يمكن أن يتعارض مع أي مكون آخر, ، جعل العرض superwidget قابلاً لإعادة الاستخدام حقًا. ومنذ هيكل الدليل في الداخل 1337c0de/ سيكون هو نفسه كما في توزيعك ، يمكن لـ CSS الرجوع إلى الصور باستخدام المسار النسبي ../images/ دون الحاجة إلى الرجوع إلى قيمة التجزئة العشوائية (والتي تعرف فقط بعد النشر).

ما هو مدير الأصول ليس كذلك

  • إنها ليست وسيلة لزيادة الأمن. سيكون مصدر المكون الخاص بك في مكان ما في الداخل protected/ على أي حال (لذلك لا يوجد تحسن هناك) ، ويجب أن تكون الأصول يمكن الوصول إليها على شبكة الإنترنت بغض النظر عن المكان الذي ينتهي به الأمر (لا يوجد أمان لهم مهما كان الأمر).
  • إنه ليس حلاً شاملًا لمعالجة أصولك (مثل تحديد CSS). على الرغم من أنه من الممكن تثبيت مدير أصول مخصص يقوم بذلك ، فلا تنس أن الأصول المضمنة في المكونات القابلة لإعادة الاستخدام ستؤدي إلى أقلية صغيرة بين جميع أصول "التطبيق الأساسي" ؛ إذا كنت ترغب في التحسين في جميع المجالات ، فيجب عليك أيضًا معالجة كل شيء آخر ولن يساعدك مدير الأصول هناك.

TL ؛ د

يتيح لك مدير الأصول إنشاء مكونات قابلة للتوزيع بسهولة ويمكن تضمينها في التطبيقات دون الخوف من إنشاء تعارض مع مكونات أخرى.

هناك ميزة أخرى أحبها في مدير الأصول ، وهي أنها تتيح لك تحديث ملفات الأصول الخاصة بك دون الحاجة إلى إخبار المستخدمين بمسح ذاكرة التخزين المؤقت الخاصة بهم.

http://www.yiiframework.com/wiki/311/assetmanager-clearing-browser-s-cache-on-siteupdate/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top