我的应用程序会即时缩小和组合静态内容,例如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是一个小的开销,但值得获得灵活性。
优秀的答案与一个很棒的解决方案!万分感谢! – Zar
静态内容的一周缓存看起来很标准。你有没有写这些文件的过程也会影响缓存? (例如重写一个.htaccess文件)取决于你如何缓存。
您可以向脚本/样式URL添加版本,例如http://example.com/generate-styles.php?version=123
。根据HTML的缓存策略,这可能会让您使CSS/JS缓存更加长久。 Wikipedia使用的软件MediaWiki使用了另一种方法:它包含一个使用寿命为5分钟的引导脚本,其中包含所有CSS/JS的版本,然后使用此信息加载最新版本的文件(使用与版本相同的技巧网址)。
你说的是服务器端缓存,不是吗?因为无法清除客户端缓存(尽管如果名称或参数不再相同,您可以让它们下载另一个文件)。 – FelipeAls
@FelipeAlsacreations确切地说,服务器端,而不是客户端。 – Zar