所以我的网站开始使用太多的资源。我的网站的核心是一个编码糟糕的vbulletin插件。不幸的是,切换并不那么容易,所以我只能尝试重写一些东西,但最重要的是:附加了不同参数的主页占用了太多的处理能力,如?image.php?id=1和?image.php?id=2。诸如此类。
无论如何,我需要一些东西,我可以用来为每个id在html中缓存这些页面,它们并不会经常改变,只有在发表评论的时候才会改变,所以每次加载它们都是无用的。我以前从来没有用过这样的东西,所以非常欢迎使用任何提示,提示,软件
编辑:我问这个问题的原因是因为我的主机上的处理器使用率开始达到很高,如果我有更多的访问者,我可能会被挂起。
编辑:我在考虑一个类似这样的系统:一个包含每个?id的数据库,如果日期比保存为html的上次缓存版本旧,则加载html,否则运行php脚本并生成新的缓存html。我想我可能不得不自己做这样的东西,只是不太确定如何开始做这样的事情。
发布于 2012-08-21 18:02:36
您可以为客户端缓存实现上述代码,而对于服务器端,您可以将处理后的图像(如果vbulletin对图像/调整大小/裁剪等操作导致高内存使用率)存储到文件中(在某些缓存目录中),这样PHP就不必在每次调用脚本时都对它们进行处理。
算法本身应该包括对vbulletin所需的$_GET参数进行散列处理,例如id=2
或width=250
、height=250
所以代码看起来就像...
$file = 'cache_dir/'.md5('file_cached_'.$_GET['id'].'_w'.$_GET['width'].'_h'.$_GET['height']).'.jpg';
if ( ! file_exists($file))
{
$image = get_image_by_id($_GET['id']);
// this is just example...
$image_blob = vbulletin_heavy_image_processing($image);
file_put_contents($file, $image_blob);
echo $image_blob;
}
else
{
echo file_get_contents($file);
}
发布于 2012-08-21 17:49:39
您可以在image.php
中将这些添加到最上面
header("Cache-Control: private, max-age=10800, pre-check=10800");
header("Pragma: private");
header("Expires: " . date(DATE_RFC822, strtotime("2 day")));
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
header('Last-Modified: ' . $_SERVER['HTTP_IF_MODIFIED_SINCE'], true, 304);
exit;
}
发布于 2012-08-21 17:59:34
现在你真正的问题在哪里?数据库调用还是提供静态内容?
在我看来,您应该从使用本地文件系统的简单缓存开始。你能缓存你提到的整个页面中最慢的页面吗?如果是这样,您可以编写自己的简单缓存代码,只需将文件写出到磁盘,并在文件未过期/失效时从磁盘加载它。
还有其他的东西,比如APC,memcaced,它们也可能对你有帮助。快速的谷歌搜索会给你最低的信息。
https://stackoverflow.com/questions/12060240
复制相似问题