好消息 微信小程序上线啦,看视频更方便。点击查看小程序码

yii2配置词典 / yii2中,为何你的'appendTimestamp' => true不起作用?

阿北哥ya 347次阅读
Yii

在开发 yii2 应用的时候,时常会碰到静态文件(js&css)缓存的问题,针对此情况我们会通过如下配置解决

'assetManager' => [
    'appendTimestamp' => true
],

但是你可能发现刷新浏览器后,a.js?v=xxx 中的v并没有改变,这是为何那?

这要涉及到AssetManager组件中关于得到资源URL链接的逻辑,请看下面的源代码

// vendor/yiisoft/yii2/web/AssetManager.php
public function getAssetUrl($bundle, $asset){
    ....
    if ($this->appendTimestamp && ($timestamp = @filemtime("$basePath/$asset")) > 0) {
        return "$baseUrl/$asset?v=$timestamp";
    }
    ....
}

看到了吧,就是 $timestamp = @filemtime("$basePath/$asset") 决定的,a.js?v=xxx 中的xxx是一个时间戳,它来自于 @filemtime("$basePath/$asset"),并不是刷新页面这一刻的时间戳。

那么filemtime是个啥那?看PHP文档。

filemtime() 函数返回文件内容上次的修改时间。

若成功,则时间以 Unix 时间戳的方式返回。若失败,则返回 false。

也就是说,a.js?v=xxx 中的 xxx 是a.js 资源上次的修改时间。

明白了么?

此文编号为438 上次更新于2个月前 / Yii 频道
留言
小提醒 欢迎大家留言并且我会拿出时间去看,当然我会删除那些被视为垃圾或广告的留言。
暂时没有回复
首页 学员登录 注册