Вопрос

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

Похоже, что намного проще просто поставить все файлы JavaScript под / webroot / js / и просто используйте теги для загрузки файлов вместо того, чтобы проходить через беду AssetManager. Кроме того, функция yii's RegisterreScriptScript, всегда помещает теги скрипта внутри тега заголовка, вместо того, чтобы поместить их в нижнюю часть кода, вблизи закрывающего тега тела, как рекомендовано YSLOW.

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

Спасибо!

Это было полезно?

Решение

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

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

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

Другие советы

Основным преимуществом менеджера актива 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/ Чтобы помочь уменьшить зависимости от относительного пути

Затем во время выполнения супервиджет выделяют подходящие теги для включения 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 и гарантированно не конфликт с любым другим опубликованным активом.

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

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

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

TL; доктор

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top