- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写一个脚本,它将组合和缩小请求的 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/
所以,我有一个类,里面有一个数组。目前,我枚举类项目的策略是使用代码 foreach (item x in classInstance.InsideArray) .我宁愿使用 foreach (ite
当通过 Google 页面速度测试运行我的网站时,它说我需要“利用浏览器缓存在静态资源的 HTTP header 中设置到期日期或最长期限会指示浏览器从本地磁盘加载以前下载的资源,而不是通过网络加载。
对于我的网站,Google PageSpeed Insights 建议更改某些可缓存资源(例如 .css、.js、.svg、google api、siteimprove)的过期值。为上述文件设置过期值
我正在编写一个脚本,它将组合和缩小请求的 CSS 文件,然后将它们回显出来。我已经完成了大部分工作,但是我还停留在一个很小但非常重要的部分:利用浏览器缓存。 我们网站的大多数访问者都是新访问者,而且很
我正在考虑使用 XLIFF 来标准化企业内的本地化工作。我是 xliff 的新手,在做了一些研究后,我想出了以下使用它的一般过程: 从开发项目资源中提取字符串(.Net 的 .resx,.proper
我有一个 WordPress 网站,其中包含我自己创建的自定义主题。目前,我正在研究“Google PageSpeed Insights”的建议,以改善我网站上的用户体验。 PageSpeed 建议“
我已将以下算法写入 C# 代码以递归列出文件夹中的文件。 开始遍历目录及其子目录中的文件列表目录。 在列表中存储文件名和路径。 如果当前文件匹配列表中的任何其他文件,则将两个文件标记为重复。 从列表中
我完全理解 Concourse 是无状态的,但是有没有办法重用已经拉取的 docker 镜像?就我而言,我构建了大约 10 个具有相同基础镜像的 docker 镜像,但每次触发构建时,Concours
fit panel.smooth function (x, y, col = par("col"), bg = NA, pch = par("pch"), cex = 1, col.smoo
上下文: 我正在探索 DSP 的广阔领域。是的,我是初学者。 我的目标: 对 audiolab 提供的音频数组应用 fft 以获得信号的不同频率。 问题: 一个问题:感谢 audiolab,我只是不知
我通过 Pingdom 测试了我的网站并得到了这个: 我进行了搜索,但找不到解决方案。有谁知道我怎样才能得到这个14到100? 最佳答案 不是一个完整的解决方案,但您可以通过将两个请求合并为一个来改善
我已将以下代码添加到我的 .htaccess,但 PageSpeed Insights 仍然显示“利用浏览器缓存”建议。 ExpiresActive on ExpiresDefault "acces
对于能够运行 GCC 生成的机器码的 RV32I,CSR 的最低要求是什么? 我正在考虑一个简单的基于 fpga 的(嵌入式)实现。不需要虚拟内存或 Linux 支持。 此外,我应该使用哪些 GCcf
背景 我有一个问题,可能有多种解决方案,但我相信有一个尚未发现的优雅解决方案利用 purrr。 示例代码 我有一个如下的大数据框,为此我在下面提供了一个示例: library(tibble) libr
我已经设置了 allauth 并注意到它暴露了 /accounts/password/change/这是更改当前登录用户密码的可爱形式。它还暴露了/accounts/email/这非常适合处理与将电子
因此,我正在尝试了解 Python 中的 scapy 库并尝试运行使用 scapy 的脚本。该脚本使用以下内容导入模块: 从 scapy.all 导入 * 我看到了这个,当然安装了 scapy : p
我是一名优秀的程序员,十分优秀!