Php 实时环境中静态内容的适当缓存持续时间
我的应用程序动态地缩小和组合静态内容,如CSS/JavaScript,以减少最终用户的加载时间。然而,这一过程需要大量资源。因此,我实现了一个缓存系统。通常在实时环境中,这种静态内容很少改变 将此内容的缓存持续时间设置为一周或更长是否愚蠢?然后向管理员提供一个工具,在他编辑样式等时手动清除缓存Php 实时环境中静态内容的适当缓存持续时间,php,javascript,css,caching,Php,Javascript,Css,Caching,我的应用程序动态地缩小和组合静态内容,如CSS/JavaScript,以减少最终用户的加载时间。然而,这一过程需要大量资源。因此,我实现了一个缓存系统。通常在实时环境中,这种静态内容很少改变 将此内容的缓存持续时间设置为一周或更长是否愚蠢?然后向管理员提供一个工具,在他编辑样式等时手动清除缓存 编辑使标签更合适将不胜感激。一周的静态内容缓存似乎相当标准。您是否可以让写入这些文件的进程也影响缓存?(例如,重写.htaccess文件)取决于缓存方式。您可以向脚本/样式URL添加版本,例如http:/
编辑使标签更合适将不胜感激。一周的静态内容缓存似乎相当标准。您是否可以让写入这些文件的进程也影响缓存?(例如,重写.htaccess文件)取决于缓存方式。您可以向脚本/样式URL添加版本,例如
http://example.com/generate-styles.php?version=123
。根据HTML的缓存策略,这可能会使CSS/JS缓存更持久。维基百科使用的软件MediaWiki使用了另一种方法:它包括一个生命周期为5分钟的引导脚本,其中包含所有CSS/JS的版本,然后使用此信息加载最新版本的文件(使用与版本化URL相同的技巧)。在服务器端情况下,在我看来,缓存失效的持续时间太过简化了。您可以知道文件何时更新,何时需要重建缓存。如果编辑是通过某个自定义界面作为应用程序的一部分进行的,那么很简单:如果进行了任何编辑,只需删除缓存即可
但是,即使你的管理员通过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开销很小,但在灵活性方面是值得的。您说的是服务器端缓存,不是吗?因为您无法清除客户端缓存(尽管如果名称或参数不再相同,您可以让他们下载另一个文件)。@FelipeAlsacreations完全是服务器端,而不是客户端。这是一个非常棒的解决方案!非常感谢!