Symfony 缓存破坏/资产缩小
Symfony cache busting / Assetic minification
使用此处的方法通过 uglify 缩小我的 js 文件后,我遇到缓存破坏问题:
http://symfony.com/doc/current/cookbook/assetic/uglifyjs.html
缩小后,我的文件加载为 1f4daf9.js
,没有在配置中设置的资产版本。
我的 uglify 过滤器配置如下:
filters:
uglifyjs2:
bin: /usr/local/bin/uglifyjs
我想要实现的是获得 1f4daf9.js?r1234
带有资产版本的名称,以便浏览器被迫重新加载它。那我该怎么做呢?
如果您将输出文件名设置为磁盘上的固定文件名,则您可以安排在请求 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)$ . [L]
</IfModule>
不幸的是,assets_version_format
不能在文件名中嵌入字符串,这会使文件命名成为一个有点手动的过程。
这对 Javascript 和 CSS 一样有效。然后 JS 和 CSS 文件也可以设置长到期时间,这意味着它们将被查看浏览器缓存,并且根本不会重新请求 - 直到 URL(与嵌入版本或哈希) 更改,并获取最新版本。
在
上找到答案
您实际上需要使用 {{ asset(asset_url) }} 而不是 {{ asset_url }} 因为它不会自动将版本添加到 asset_url。
使用此处的方法通过 uglify 缩小我的 js 文件后,我遇到缓存破坏问题: http://symfony.com/doc/current/cookbook/assetic/uglifyjs.html
缩小后,我的文件加载为 1f4daf9.js
,没有在配置中设置的资产版本。
我的 uglify 过滤器配置如下:
filters:
uglifyjs2:
bin: /usr/local/bin/uglifyjs
我想要实现的是获得 1f4daf9.js?r1234
带有资产版本的名称,以便浏览器被迫重新加载它。那我该怎么做呢?
如果您将输出文件名设置为磁盘上的固定文件名,则您可以安排在请求 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)$ . [L]
</IfModule>
不幸的是,assets_version_format
不能在文件名中嵌入字符串,这会使文件命名成为一个有点手动的过程。
这对 Javascript 和 CSS 一样有效。然后 JS 和 CSS 文件也可以设置长到期时间,这意味着它们将被查看浏览器缓存,并且根本不会重新请求 - 直到 URL(与嵌入版本或哈希) 更改,并获取最新版本。
在
上找到答案
您实际上需要使用 {{ asset(asset_url) }} 而不是 {{ asset_url }} 因为它不会自动将版本添加到 asset_url。