我只使用内置于CSS / JS聚合中的Drupal 7,但是css.gz和js.gz文件所在的文件文件夹正在以相当快的速度填充,尽管我敢肯定这会需要一段时间在它完全充满驱动器之前,现在是任何时候处理这种情况的好时机。
- / js中的当前文件数为335
- / css中的当前文件数为451
我应该采用任何标准方法来处理这种情况吗?我更喜欢一个解决方案,使drupal处于循环中。
此外,我发现许多gz文件都有非gz副本。是否同时保留.css和.css.gz文件有什么原因?可能会gr废?
谢谢
我只使用内置于CSS / JS聚合中的Drupal 7,但是css.gz和js.gz文件所在的文件文件夹正在以相当快的速度填充,尽管我敢肯定这会需要一段时间在它完全充满驱动器之前,现在是任何时候处理这种情况的好时机。
我应该采用任何标准方法来处理这种情况吗?我更喜欢一个解决方案,使drupal处于循环中。
此外,我发现许多gz文件都有非gz副本。是否同时保留.css和.css.gz文件有什么原因?可能会gr废?
谢谢
Answers:
这实际上是设计使然,因此不会破坏包含较旧版本文件的缓存页面。看到这个封闭的问题。
TL; DR:drupal_stale_file_threshold
通过drupal_clear_css_cache()
和创建后,它们将在30天后(或将您的变量设置为任何值)自动删除drupal_clear_js_cache()
。因此,解决方案是将drupal_stale_file_threshold
值修改为低于默认30天的值。
清空查询变量后,不会立即删除旧的缓存文件,而是在设置的时间段后通过drupal_delete_file_if_stale()将其删除。这样可以确保高速缓存页面引用的文件仍然可用。
drupal_delete_file_if_stale()
默认为30天-因此,如果a)Cron运行正常,并且b)看到聚合的文件早于30天,则您会遇到其他问题。
variable_get('drupal_stale_file_threshold', 2592000)
是30天的支票。
variable_set('drupal_stale_file_threshold', 172800)
会将超时更改为两天。在严格控制缓存处理的站点上,时间可能会更短。
来源:http : //api.drupal.org/api/drupal/includes!common.inc/function/drupal_build_css_cache/7
有关drupal_delete_file_if_stale()
更多信息,请参见。
如果启用CSS gzip压缩,则启用纯净URL(这意味着重写规则有效)并且zlib扩展可用,然后创建该文件的gzip版本。该文件有条件地提供给使用.htaccess规则接受gzip的浏览器。
也看到drupal_build_js_cache()
这是几乎相同的drupal_build_css_cache()
。
4年后,我不得不不同意第一个答案,即作者指出:
“这确保了缓存页面引用的文件仍然可用。”
也许可以确定/优化了旧文件的聚合设置,但是如果我在服务器上的files / advagg_js(我显然仍在其中的一个浏览器中使用)上手动删除了旧文件,则会重新生成随后的页面与最近添加的javascript源代码完全相同的文件,就像drupal_build_js_cache()
在该聚合文件名上执行一样。
例如。 js__22qMV1d_G25luSFBkuR7bIuKD5FE80eKuXx6ldibEixg__yjA2JTeF2f1LUJ3PMdjMr8k9nOPZQJIcvVw-c5Gz_yc__FY0NTHFBVMd9MIGE5srDXTejEZGP-ccSH7UX2zImN-0.js
因此,我得出的结论是,将其设置为较低的值drupal_stale_file_threshold
将不会导致任何问题,即使删除所有聚合的文件,然后清除缓存,也将强制重新生成聚合(经过测试并确认可以重新加载页面)
可能是这样的:
$dir = 'your/directory/';
foreach(glob($dir.'*.*') as $v){
unlink($v);
}
这些php函数可能会帮助您根据需要修改代码。
执行此操作之前要非常小心!如果未正确使用,您可以删除您的网站!在尝试此代码之前,请在本地主机上对其进行测试