适用于实时环境中静态内容的缓存持续时间

时间:2012-06-21 16:34:39

标签: php javascript css caching

我的应用程序可以动态缩小和组合CSS / JavaScript等静态内容,以减少最终用户的加载时间。然而,这个过程非常需要资源。因此,我实现了一个缓存系统。通常在现场环境中,这种静态内容很少发生变化。

将此内容的缓存持续时间设置为一周,甚至更多是不是很愚蠢?然后为管理员提供一个工具,在他编辑样式等时手动清除缓存。

赞赏使标签更合适的编辑。

3 个答案:

答案 0 :(得分:1)

在服务器端情况下,我认为缓存失效的持续时间过于简化。您可以知道何时更新文件,并且需要重建缓存。如果编辑是通过某个自定义界面作为应用程序的一部分进行的,那很简单:如果进行了任何编辑,只需删除缓存。

但即使您的管理员通过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是一个小开销,但值得灵活获得。

答案 1 :(得分:0)

静态内容的一周缓存似乎非常标准。你有没有写这些文件的过程也会影响缓存? (例如,重写.htaccess文件)取决于你的缓存方式。

答案 2 :(得分:0)

您可以在脚本/样式网址中添加版本,例如http://example.com/generate-styles.php?version=123。根据HTML的缓存策略,这可能允许您使CSS / JS缓存更长久。另一种方法是由维基百科使用的软件MediaWiki使用:它包含一个生命周期为5分钟的引导脚本,其中包含所有CSS / JS的版本,然后使用此信息加载最新版本的文件(使用版本化的相同技巧)网址)。