缓存动态内容(PHP)
演示如何使用Last Modified和ETag头
优化网站的缓存。如果使用正确,这将加速页面加载。
// 开始输出缓冲,这将捕获所有内容,以便我们可以进行一些计算
ob_start();
// 示例HTML
print '<html>';
// 请在此处输入您的内容:
print '<h1>Example content</h1>';
print '<ul>';
for ($x=0; $x < 10; $x++)
print "<li>List item $x</li>";
print '</ul>';
print '</html>';
// or include() something here
// 现在将所有内容从上面保存到变量
$PageContent = ob_get_contents();
//并清除缓冲区,因此内容将不会提交给客户端(稍后我们将手动进行处理)
ob_end_clean();
// 通过使用MD5生成唯一的哈希ID
$HashID = md5($PageContent);
//指定页面更改的时间。例如,此日期可以来自数据库或任何文件。在这里,我们定义一个固定的日期值:
$LastChangeTime = 1144055759;
//定义代理或缓存的过期时间
$ExpireTime = 3600; // seconds (= one hour)
// 获取请求标头:
$headers = apache_request_headers();
// 您也可以使用getallheaders()或$ _SERVER 或HTTP_SERVER_VARS
// 添加页面
header('Content-Type: text/html');
// 内容语言
header('Content-language: en');
// 设置缓存代理信息:
header('Cache-Control: max-age=' . $ExpireTime); // 必须重新验证
header('Expires: '.gmdate('D, d M Y H:i:s', time()+$ExpireTime).' GMT');
// 设置最后修改的标题(这有助于搜索引擎和其他Web工具确定页面是否已更新)
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $LastChangeTime).' GMT');
// 发送代表内容的的“ ETag”(这有助于浏览器确定页面是否已更改,或者是否可以从缓存中加载页面-这将加快页面加载速度)
header('ETag: ' . $HashID);
//如果请求的页面已更改,浏览器会“询问”我们并发送其在内部缓存中的最后修改日期。因此,现在我们可以检查提交的时间是否等于我们的内部时间值。如果是,则页面未更新
$PageWasUpdated = !(isset($headers['If-Modified-Since']) and
strtotime($headers['If-Modified-Since']) == $LastChangeTime);
//第二种可能性是浏览器向我们发送他拥有的最后一个Hash-ID。如果他这样做,我们可以通过比较两个ID来确定他是否具有最新版本。
$DoIDsMatch = (isset($headers['If-None-Match']) and
ereg($HashID, $headers['If-None-Match']));
// 两种方法之一适用吗?
if (!$PageWasUpdated or $DoIDsMatch){
//好的,浏览器已经在其缓存中提供了该页面的最新版本。
//因此,只需告诉他页面没有被修改,就不要发送内容->这样可以节省带宽并加快访问者的加载速度
header('HTTP/1.1 304 Not Modified');
// 就这样,现在关闭连接:
header('Connection: close');
//神奇的部分:
//这里没有内容;-)
//仅是标题
}
else {
//好吧,浏览器没有最新版本或没有任何版本缓存。因此,我们必须将完整的页面发送给他。
header('HTTP/1.1 200 OK');
// 告诉浏览器内容
header('Content-Length: ' . strlen($PageContent));
// 发送完整内容
print $PageContent;
}
代码介绍 基于canvas绘制全屏透明的粒子背景,网状粒子跟随鼠标视差背景动画特效。 演示截图 相关推荐: 网页特效:游戏类充值界面ui布局特效介绍 一款简单的最新活动游戏月卡充值套餐界面布局代码。 演示截图 相关推荐: 卡通的数字百分比flash进度条动画素…
关注微信公众号『OOINK』
第一时间了解最新资源动态关注OO.INK不迷路~
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 下载资源需要解压密码,解压密码是什么?
1、本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2、分享目的仅供大家学习和交流,请不要用于商业用途!
3、本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
4、如有链接无法下载、失效或广告,请联系管理员处理!
5、本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
OO.INK资源网 » 缓存动态内容(PHP)
2、分享目的仅供大家学习和交流,请不要用于商业用途!
3、本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
4、如有链接无法下载、失效或广告,请联系管理员处理!
5、本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
OO.INK资源网 » 缓存动态内容(PHP)