我的应用程序即时压缩和组合静态内容,例如 CSS / JavaScript,以减少最终用户的加载时间。然而,这个过程非常需要资源。因此,我实现了一个缓存系统。通常在现场环境中,这种静态内容很少改变。
将此内容的缓存持续时间设置为一周甚至更多会是愚蠢的吗?然后为管理员提供一个工具,让他在编辑样式等时手动清除缓存。
使标签更合适的编辑将不胜感激。
我的应用程序即时压缩和组合静态内容,例如 CSS / JavaScript,以减少最终用户的加载时间。然而,这个过程非常需要资源。因此,我实现了一个缓存系统。通常在现场环境中,这种静态内容很少改变。
将此内容的缓存持续时间设置为一周甚至更多会是愚蠢的吗?然后为管理员提供一个工具,让他在编辑样式等时手动清除缓存。
使标签更合适的编辑将不胜感激。
在服务器端的情况下,我认为缓存失效的持续时间太简单了。您可以知道文件何时更新以及需要重建缓存。如果编辑是通过某个自定义界面作为应用程序的一部分进行的,那很简单:如果进行了任何编辑,只需删除缓存即可。
但即使您的管理员通过 FTP 更新文件,您也可以查看时间戳。
例子:
<?php
$files = array("reset.css", "style.css");
$timestamps = "";
foreach( $files as $file ){
$timestamps .= filemtime($file);
}
$cache_file = md5($timestamps).".css";
if( !file_exists($cache_file) ){
// Build minified version into cache file
// (leaving the implementation out here)
concat_and_minify($files, $cache_file);
}
echo '<link rel="stylesheet" type="text/css" href="' . $cache_file . '"/>'; ?>
如果任何文件发生更改,这只会重建您的缩小版本。与“愚蠢”的持续时间机制相比,读取每个文件的 mtime 开销很小,但在灵活性方面是值得的。
静态内容的一周缓存似乎很标准。难道你不能让写入这些文件的过程也影响缓存吗?(例如重写 .htaccess 文件)取决于您的缓存方式。
您可以向脚本/样式 URL 添加一个版本,例如http://example.com/generate-styles.php?version=123
. 根据 HTML 的缓存策略,这可以让 CSS/JS 缓存更长寿。MediaWiki 使用了另一种方法,这是 Wikipedia 使用的软件:它包括一个生命周期为 5 分钟的引导脚本,其中包含所有 CSS/JS 的版本,然后使用此信息加载最新版本的文件(使用与 versioned 相同的技巧网址)。