В чем смысл AssetManager Yii?

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

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

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

Благодаря!

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

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

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

Основное преимущество менеджера активов Yii заключается в том, что он позволяет вам структурировать ваши компоненты в автономном режиме .

Сказка о виджетах

Рассмотрим компонент, который является виджетами пользовательского интерфейса. Предположим, что дистрибутив включает в себя пару активов вместе с реализацией компонента, например эти файлы:

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

Подумайте, как включить этот виджет в ваше приложение, если диспетчер активов не существует. Типичные шаги могут включать:

  1. Скопируйте SuperWidget.php где-нибудь в protected/ каталоге protected/
  2. Скопируйте файл js/ каталог js/
  3. Скопируйте файл 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.php superwidget/assets/ с копией, заканчивающейся, например, assets/1337c0de/ где assets/ это путь базового актива вашего приложения, а 1337c0de/ – случайный хэш, созданный Yii, и гарантированный не противоречат каким-либо другим опубликованным ресурсам.

Это означает, что активы для SuperWidget не могут конфликтовать с ресурсами любого другого компонента , что делает SuperWidget действительно многоразовым. А поскольку структура каталогов внутри 1337c0de/ будет такой же, как в вашем дистрибутиве, CSS может ссылаться на изображения с использованием относительного пути ../images/ не ../images/ к значению случайного хэша (который известен только после публикации) ,

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

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

TL; DR

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

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

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