缓存PHP内容的建议

缓存PHP内容的建议,php,caching,Php,Caching,所以我的网站开始使用太多的资源。我网站的核心是一个糟糕的vbulletin插件。不幸的是,切换并不是那么容易,所以我只能尝试重写一些东西,但最重要的是: 附加了不同参数的主页占用了太多的处理能力,如?image.php?id=1和?image.php?id=2。。诸如此类 无论如何,我需要一些东西,我可以用来缓存这些网页在html中的每个id,他们真的不会经常改变,只有当评论发布,所以它是无用的加载他们每一次。 我以前从未做过类似的工作,所以任何提示、提示和软件都是非常受欢迎的 编辑:我问这个问

所以我的网站开始使用太多的资源。我网站的核心是一个糟糕的vbulletin插件。不幸的是,切换并不是那么容易,所以我只能尝试重写一些东西,但最重要的是: 附加了不同参数的主页占用了太多的处理能力,如?image.php?id=1和?image.php?id=2。。诸如此类

无论如何,我需要一些东西,我可以用来缓存这些网页在html中的每个id,他们真的不会经常改变,只有当评论发布,所以它是无用的加载他们每一次。 我以前从未做过类似的工作,所以任何提示、提示和软件都是非常受欢迎的

编辑:我问这个问题的原因是因为我的主机上的处理器使用率开始达到很高的水平,如果我有更多的访问者,我可能会被暂停

编辑:我在想一个类似这样的系统:一个数据库,其中包含每个?id和上次修改的日期(如添加的注释或其他内容),如果日期早于保存为html的上次缓存版本,则加载html,否则运行php脚本并生成一个新的缓存html。
我想我可能得自己做一些类似的东西,只是不太确定如何开始做类似的东西。

你可以在最上面的
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;
}

你现在真正的问题在哪里?数据库调用或提供静态内容

听起来你应该从使用本地文件系统的简单缓存开始。 你能缓存你提到的整体速度最慢的页面吗?如果是这样,您可以编写自己的简单缓存代码,只需将文件写入磁盘,并在文件未过期/无效时从磁盘加载


还有其他一些东西,比如APC、memcaced,也可能对您有所帮助。快速谷歌搜索将为您提供最底层的功能。

您可以为客户端缓存实现上述代码,而对于服务器端,您可以将处理过的(如果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);
}

不,我不认为那会有什么好处。我需要以某种方式使用服务器端缓存。通常用户只是浏览一堆不同的图像,而不是多次浏览相同的图像,所以这只会有一点帮助。PHP是服务器端。在请求资源之前,无法缓存该资源。你用的是什么插件?PhotoPost vBGallery,很抱歉,我对PHP和一般的编码都不熟悉,所以如果我不能正确理解某些东西,这就是原因。我将在一秒钟内编辑我的帖子,试图更清楚地表达我的意思。但不确定是否存在这种情况。缓存与处理无关。这个插件可能是一堆缓慢的查询,让你的系统陷入困境。这不是问题的关键,用一个html页面来代替这些混乱,如果没有新的内容,就不需要查询。