Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 实时环境中静态内容的适当缓存持续时间_Php_Javascript_Css_Caching - Fatal编程技术网

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

Php 实时环境中静态内容的适当缓存持续时间,php,javascript,css,caching,Php,Javascript,Css,Caching,我的应用程序动态地缩小和组合静态内容,如CSS/JavaScript,以减少最终用户的加载时间。然而,这一过程需要大量资源。因此,我实现了一个缓存系统。通常在实时环境中,这种静态内容很少改变 将此内容的缓存持续时间设置为一周或更长是否愚蠢?然后向管理员提供一个工具,在他编辑样式等时手动清除缓存 编辑使标签更合适将不胜感激。一周的静态内容缓存似乎相当标准。您是否可以让写入这些文件的进程也影响缓存?(例如,重写.htaccess文件)取决于缓存方式。您可以向脚本/样式URL添加版本,例如http:/

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

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


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

一周的静态内容缓存似乎相当标准。您是否可以让写入这些文件的进程也影响缓存?(例如,重写.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完全是服务器端,而不是客户端。这是一个非常棒的解决方案!非常感谢!