0

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

无论如何,我需要一些可以用来为每个 id 将这些页面缓存在 html 中的东西,它们并不会经常更改,只有在发布评论时才会更改,因此每次都加载它们是没用的。我以前从未使用过这样的东西,所以非常欢迎任何提示、提示、软件使用

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

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

4

3 回答 3

0

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-21T17:49:38.733 回答
0

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

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

还有其他的东西,比如 APC、memcaced,它们也可能对你有帮助。快速的谷歌搜索将为您提供低谷。

于 2012-08-21T17:59:33.660 回答
0

您可以为客户端缓存实现上述代码,至于服务器端,您可以将处理后的图像(如果 vbulletin 对图像/调整大小/裁剪等导致高内存使用率)存储到文件中(在某些缓存目录中),所以 PHP每次调用脚本时都不必处理它们。

算法本身应该包括散列 vbulletin 所需的 $_GET 参数,例如id=2or width=250height=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-21T18:02:35.647 回答