2016-08-31 10:35:38 3353次浏览 2条回答 0 悬赏 10 金钱

我在module.php里定义了一个返回asset路径的:

public function getAssetsUrl()
    {
        if ($this->_assetsUrl === null)
            $this->_assetsUrl = Yii::$app->getAssetManager()->publish(
                Yii::getAlias('@admin.assets') );
        return $this->_assetsUrl;
    }

方法用到了Yii的publish方法,看官方的文档这个方法会对比素材的修改时间,如果有修改,则会拷贝的web目录下的assets文件下,我有几点疑问,还望了解的大神解惑:
1、每次调用assetsUrl属性,都会执行publish方法吗?这样不是会产生硬盘IO吗?这在生产环境很影响性能吧?
2、我发现必须得在web.php(配置文件)里添加

$config['components']['assetManager']['forceCopy'] = true;

module下的素材才会拷贝到web目录下,官方不是说会自动判断吗?
3、admin module下的assets有可能很大,比如用一些收费的后台模板,整个素材都有100多m,每次都要拷贝,效率得多底下啊?

另外一个疑问是在视图里面单独引用css和js文件的问题:
4、我发现js文件必须得这样引用:

<?php $this->registerJsFile(Yii::$app->getModule('admin')->assetsUrl[1].'/js/index.js') ?>

直接写script标签是不行的,但是css又可以直接写link标签引用,为何呢?

刚刚接触Yii框架,可能很多知识点还未学习,请大牛轻拍,同时给些指导,先谢过了!

  • 回答于 2016-09-02 09:19 举报

    在asset文件上设置sourcePath,框架会为没有发布的资源,自动发布。已发布的不变。
    可以参照权威教程:http://www.yiichina.com/doc/guide/2.0/structure-assets 中关于 sourcePath basePath baseUrl三者关系的设置

  • 回答于 2016-09-04 00:11 举报

    不是每次都发布的,只有设置了

    $config['components']['assetManager']['forceCopy'] = true;
    

    才会发布,当然如果上线css,js等变化不频繁了,可以通过压缩成一个文件来提高速度。具体方法文档里都有。

您需要登录后才可以回答。登录 | 立即注册
38442
等待激活

38442

注册时间:2016-10-31
最后登录:1970-01-01
在线时长:0小时0分
  • 粉丝0
  • 金钱0
  • 威望0
  • 积分0

热门问题