繁体   English   中英

Yii的AssetManager有什么意义?

[英]What's the point of Yii's AssetManager?

我找不到有关Yii的AssetManager的更多信息来管理JS和CSS文件。 我的问题是使用AssetManager有什么意义? 我不确定它为我的开发过程带来了什么价值,事实上,它似乎使我的代码变得复杂......每次我更改我的脚本或css代码时,我都必须进入并删除我的资产文件夹以确保我有最新版本。

似乎将所有Javascript文件放在/ webroot / js /下更简单,只需使用标签加载文件而不是经历AssetManager的麻烦。 另外,Yii的registerCoreScript函数总是将脚本标记放在标题标记内,而不是按照YSlow的建议将它们放在代码的底部,靠近结束标记。

我认为我对Yii的AssetManager的理解肯定存在差距。 任何人都有任何想法为什么使用AssetManager比在PHP代码中硬编码脚本标签更好? 我有点困惑......

谢谢!

我相信有人可以比我自己更好地回答这个问题,但基本上你的 JS和CSS文件可以保留在你的Protected文件夹中。

这对于一件事情来说更安全,但对我来说主要的好处是你可以使用资产发布系统压缩和缩小和处理你的资产 ,这样就可以更容易地在CDN上托管你的JS和CSS,因为它是与您的代码库分开。

另外,这是qiang (写Yii的人)对此的官方回应

Yii资产管理器的主要好处是它允许您以独立的方式构建组件

一个小部件的故事

考虑一个UI小部件的组件。 让我们假设分发包含一些资产以及组件实现,例如这些文件:

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.php superwidget/assets/目录,副本最终在例如assets/1337c0de/ ,其中assets/是您的应用程序的基本资产路径, 1337c0de/是由Yii创建的随机哈希并保证与任何其他已发布的资产不冲突。

这意味着SuperWidget的资产不可能与任何其他组件的资产冲突 ,使SuperWidget真正可重用。 而且,由于里面的目录结构1337c0de/将是相同的分布,CSS可以参照使用相对路径图像../images/无需指随机哈希值(这是只知道出版后) 。

资产经理不是什么

  • 这不是增加安全性的方法。 您的组件源将位于protected/无论如何(因此没有任何改进),并且资产需要可以通过Web访问,无论它们最终被复制到哪里(无论什么都没有安全性)。
  • 它不是处理资产的全能解决方案(例如缩小CSS)。 虽然可以安装执行此操作的自定义资产管理器,但请不要忘记,可重用组件中包含的资产在所有“基础应用程序”资产中占少数; 如果你想要全面缩小,你还必须处理其他所有事情,资产经理也无法帮助你。

TL; DR

资产管理器允许您创建易于分发的组件,并且可以包含在应用程序中,而不必担心与其他组件产生冲突。

我喜欢资产管理器的另一个好处是,它允许您更新资产文件,而无需告诉用户清除其缓存。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM