Я не могу найти много информации об 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
Подумайте, как включить этот виджет в ваше приложение, если диспетчер активов не существует. Типичные шаги могут включать:
SuperWidget.php
где-нибудь в protected/
каталоге protected/
js/
каталог js/
css/
каталог css/
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/
любом случае (так что никакого улучшения там нет), и активы должны быть доступны через Интернет независимо от того, где они копируются (никакой безопасности для них не важно). Диспетчер активов позволяет создавать компоненты, которые легко распределяются и могут быть включены в приложения, не опасаясь создавать конфликты с другими компонентами.
Еще одним преимуществом, которое мне нравится в менеджере активов, является то, что он позволяет вам обновлять ваши файлы активов, не сообщая своим пользователям очистить свой кеш.
http://www.yiiframework.com/wiki/311/assetmanager-clearing-browser-s-cache-on-site-update/