Symfony缓存破坏/资产缩小

时间:2015-08-07 14:03:41

标签: symfony caching browser-cache assetic uglifyjs

我通过uglify使用方法从这里缩小我的js文件后出现缓存清除问题: http://symfony.com/doc/current/cookbook/assetic/uglifyjs.html

缩小后,我的文件加载为1f4daf9.js,没有在配置中设置的资产版本 我的uglify过滤器配置如下:

 filters:
    uglifyjs2:
        bin: /usr/local/bin/uglifyjs

我想要获得的是使用资产版本获取1f4daf9.js?r1234名称,以便浏览器强制重新加载它。那我怎么能这样做呢?

2 个答案:

答案 0 :(得分:2)

https://stackoverflow.com/a/27900224/3922926上找到答案 您实际上需要使用{{asset(asset_url)}}而不是{{asset_url}},因为它不会自动向asset_url添加版本。

答案 1 :(得分:0)

如果在磁盘上将输出文件名设置为固定文件名,则可以在请求URL(实际上名称不相同)上安排缓存清除。它仍然会从磁盘发送原始文件。 h5bp cache-busting config有一个例子:

# If you're not using a build process to manage your filename version
# revving, you might want to consider enabling the following directives
# to route all requests such as `/style.12345.css` to `/style.css`.
#
# To understand why this is important and even a better solution than
# using something like `*.css?v231`, please see:
# http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.+)\.(\d+)\.(bmp|css|cur|gif|ico|jpe?g|js|png|svgz?|webp|webmanifest)$ $1.$3 [L]
</IfModule>

不幸的是,assets_version_format无法在文件名中嵌入字符串,这会使文件命名成为一个有点手动的过程。

这对于Javascript和CSS一样适用。然后,JS和CSS文件也可以设置为具有长到期时间,这意味着它们将被查看浏览器缓存,而不会被重新请求 - 直到URL(具有嵌入版本或哈希)发生更改,并获取最新版本。