gpt4 book ai didi

php - 动态缩小 CSS : leveraging browser caching

转载 作者:太空宇宙 更新时间:2023-11-04 15:27:58 24 4
gpt4 key购买 nike

我正在编写一个脚本,它将组合和缩小请求的 CSS 文件,然后将它们回显出来。我已经完成了大部分工作,但是我还停留在一个很小但非常重要的部分:利用浏览器缓存。

我们网站的大多数访问者都是新访问者,而且很少会回来。所以我们真正担心的是同一 session 中页面请求之间的缓存。比如,他们点击了我们的主页,然后导航到其他几个页面并离开了。

我遇到的问题是我在 session 中存储了每个特定文件集的最后请求时间的时间戳。因此,如果我想要 main.css 和 internet.css 这个请求,然后是 main.css 和 phone.css 下一个页面 View ,那么最后一个请求的时间戳将被更新,但如果我再次请求同一组文件,时间戳将与上次无变化。

希望我说的有道理。问题是,当文件从上次请求到这个文件没有变化时,我返回 304 not modified。但是,浏览器并没有像它应该的那样缓存 css。关于为什么不可以的任何想法?

您可以在这里查看我的代码:https://gist.github.com/4235836 (我通常会把它放在这里,但有点长)

最佳答案

我认为您应该在发送 304 之前检查请求 header If-modified-since:

if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && 
strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $minifier->lastModified)
{
header('HTTP/1.0 304 Not Modified');
exit;
}

还要注意导出。如果您发出 304,则意味着客户端已经有最新版本,因此您应该在那里退出您的脚本。

编辑:

当使用过期 header 时,浏览器会假定它已经拥有最新版本。因此它甚至不会向服务器发出请求,这与使用 HTTP_IF_MODIFIED_SINCE header 不同。

所以你可能还想添加:

header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + (60 * 60 * 24)));

然后为了确保文件更改后它将请求新版本,您可以执行以下操作:

<link rel="stylesheet" type="text/css" 
href="minify.php?v=<?php echo filemtime($theFileToMinify) ?>">

关于php - 动态缩小 CSS : leveraging browser caching,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13770083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com