Какой смысл в Yii AssetManager? - PullRequest
       8

Какой смысл в Yii AssetManager?

5 голосов
/ 02 сентября 2010

Я не могу найти много информации о AssetManager Yii для управления файлами JS и CSS. Мой вопрос здесь заключается в том, какой смысл использовать AssetManager? Я не уверен, какое значение это добавляет к моему процессу разработки, на самом деле, кажется, что это усложняет мой код ... каждый раз, когда я меняю свои сценарии или код CSS, я должен зайти и удалить папку ресурсов, чтобы убедиться У меня самые последние версии.

Кажется, гораздо проще просто поместить все файлы Javascript в / webroot / js / и просто использовать теги для загрузки файлов вместо того, чтобы справляться с проблемами AssetManager. Кроме того, функция YC registerCoreScript всегда размещает теги скрипта внутри тега заголовка, а не помещает их внизу кода рядом с закрывающим тегом тела, как рекомендовано YSlow.

Я думаю, что в моем понимании AssetManager Yii должен быть пробел. У кого-нибудь есть идеи, почему использование AssetManager лучше, чем жесткое программирование тегов скрипта внутри кода PHP? Я немного растерялся ...

Спасибо!

Ответы [ 3 ]

23 голосов
/ 03 сентября 2010

Я уверен, что кто-то может ответить на этот вопрос лучше, чем я, но в основном это так, что ваши исходные файлы JS и CSS могут оставаться в вашей защищенной папке.

Это немного более безопасно с одной стороны, но главное преимущество для меня заключается в том, что вы можете сжимать и минимизировать и обрабатывать ваши активы с помощью системы публикации активов, и это облегчает размещайте JS и CSS на CDN , поскольку он отделен от вашей кодовой базы.

Кроме того, вот официальный ответ от qiang (парня, который написал Yii) по этому поводу.

7 голосов
/ 18 октября 2012

Основным преимуществом менеджера активов 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 не могут конфликтовать с активами любого другого компонента , что делает SuperWidget действительно повторно используемым.А поскольку структура каталогов внутри 1337c0de/ будет такой же, как и в вашем дистрибутиве, CSS может ссылаться на изображения, используя относительный путь ../images/, без необходимости ссылаться на значение случайного хэша (который известен только после публикации).

Чем не является менеджер активов

  • Это не способ повысить безопасность.В любом случае, ваш источник компонента будет где-то внутри protected/ (поэтому никаких улучшений там нет), и ресурсы должны быть доступны через Интернет независимо от того, где они в конечном итоге копируются (для них нет защиты, несмотря ни на что).
  • Это не универсальное решение для обработки ваших активов (например, минимизация CSS).Хотя есть возможность установить собственный менеджер ресурсов, который делает это, не забывайте, что активы, включенные в повторно используемые компоненты, будут небольшим меньшинством среди всех ваших активов «базового приложения»;если вам нужна минификация по всем направлениям, вам также придется обрабатывать все остальное, и менеджер активов вам там не поможет.

TL; DR

Менеджер активов позволяет вамсоздавать компоненты, которые легко распространяются и могут быть включены в приложения, не опасаясь конфликтов с другими компонентами.

2 голосов
/ 10 мая 2013

Еще один плюс, который мне нравится в диспетчере активов, заключается в том, что он позволяет обновлять файлы активов без необходимости указывать пользователям очищать кэш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...