2012-06-21 20 views
2

我的应用程序会即时缩小和组合静态内容,例如CSS/JavaScript,以减少最终用户的加载时间。然而,这个过程对资源要求很高。由于这个原因,我实现了一个缓存系统。通常情况下,这种静态内容很少会改变。适用于活动环境中静态内容的缓存持续时间

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

编辑以使标签更合适,将不胜感激。

+0

你说的是服务器端缓存,不是吗?因为无法清除客户端缓存(尽管如果名称或参数不再相同,您可以让它们下载另一个文件)。 – FelipeAls

+0

@FelipeAlsacreations确切地说,服务器端,而不是客户端。 – Zar

回答

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是一个小的开销,但值得获得灵活性。

+0

优秀的答案与一个很棒的解决方案!万分感谢! – Zar

0

静态内容的一周缓存看起来很标准。你有没有写这些文件的过程也会影响缓存? (例如重写一个.htaccess文件)取决于你如何缓存。

0

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

相关问题