【发布时间】:2012-12-30 00:30:06
【问题描述】:
我一直在研究一些策略来优化我正在研究的 Web 应用程序,特别是与 Web 浏览器缓存和动态数据相关的。由于可能在一个会话中多次加载相同的动态内容,我想出了以下方法,使用 PHP 的输出缓冲区并将内容的哈希用作 ETag。
我意识到我用这种方法唯一真正节省的是将数据传输回用户,因为 PHP 脚本仍然必须完全运行,但我很好奇是否有人做过类似的事情以及是否有任何想法或我应该注意的问题或其他方法可能更好。
这是我在每页顶部包含的代码:
<?php
function hash_buffer($content) {
$buffer_hash = crc32($content);
if ($_SERVER['HTTP_IF_NONE_MATCH'] == $buffer_hash) {
header('HTTP/1.1 304 Not Modified');
header("ETag: $buffer_hash");
return '';
}
header('Cache-Control: private, no-cache');
header("ETag: $buffer_hash");
return $content;
}
ob_start('hash_buffer');
?>
【问题讨论】:
-
"the only thing" - 数据传输是一件相当大的事情,所以它当然值得优化。
-
使用 ob_start("ob_gzhandler"); 压缩输出虽然不是问题的一部分,但也可能是一个好主意。 research.ibm.com/people/f/fdouglis/papers/sigcomm97.pdf
标签: php browser caching cache-control